Dojo 访问 js 文件外的 js 对象

Posted

技术标签:

【中文标题】Dojo 访问 js 文件外的 js 对象【英文标题】:Dojo accessing js object outside js file 【发布时间】:2014-04-04 15:59:20 【问题描述】:

我有一个带有 DgridDojo 应用程序。我想将保存 dgrid 数据的 javascript 推送到服务器。我在访问 javascript 文件之外的 javascript 对象时遇到问题。

申请表使用 dojo 向导,因此当用户在 wizard 上单击下一步以移动到另一个页面时,我想提交数据(javascript 对象)从当前页面到服务器进行验证和处理。

我面临的问题是 javascript 对象的范围。我将 javascript 对象 (studentData) 移动到全局范围内,但问题仍然存在。下面是来自 js 文件和我的表单向导的一些代码:

创建 dgrid 的 JavaScript 函数

//imports Dojo items
require([ "dojo/parser", "dojo/_base/declare", "dojo/store/Memory",

], function(parser, declare, Memory, OnDemandGrid, ColumnSet, Selection,
        selector, Keyboard, DijitRegistry, editor, ColumnHider, ready, Dialog,
        on, registry, Observable, lang) 

    var studentData = [ 
        id : "1",
        age : "33",
        idtype : "1",
        first_name : "Edward",
        surname : "Davis"
    , 
        id : "2",
        age : "41",
        idtype : "2",
        first_name : "Lewis",
        surname : "Holl"
    , 
        id : "3",
        age : "59",
        idtype : "3",
        first_name : "Fred",
        surname : "James"
     ];

    dojo.ready(function() 
        // Code
        function byId(Id) 

            return document.getElementById(Id);
        

    );

    var aliasStore = new dojo.store.Observable(new Memory(
        data : aliasData,
        idProperty : "id"
    ));
    var CustomStudentGrid = declare([ OnDemandGrid, selector, Selection,
            Keyboard, editor, DijitRegistry, ColumnHider ]);
    var studentGrid = new CustomStudentGrid(
        store : studentData,
        columns : 
            id : 
                label : "Id",
                field : "id",
                hidden : true
            ,

            idtype : 
                label : "Id Code",
                field : "idtype",
                hidden : true
            ,

            chkBox : selector(),

            first_name : 
                label : "First Names",
                field : "first_name"
            ,
            surname : 
                label : "Surname",
                field : "surname"
            

        ,
        selectionMode : "none",
        loadingMessage : "Loading data...",
        noDataMessage : "No results found....",
        allowSelectAll : true
    , "studentGrid");

    aliasNameGrid.on('dgrid-select', function(event) 

        for ( var i in selectedRows) 

            event.rows[i].element.className = "deleteRow";

        

    );

    aliasNameGrid.on('dgrid-deselect', function(event) 

        for ( var i in deSelectedRows) 
            // alert('Deselected Rows are ' + i);
            event.rows[i].element.classList.remove('deleteRow');

        
    );

    studentGrid.refresh();

);

向导表格

当用户点击下一个按钮'passFunction'调用'Send Form'函数

我如何在 SendForm 函数或任何其他 javascript 文件中访问 studentDatastudentData 将由用户在 grid

上进行操作
!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script>

    function SendForm(dojo) 

        console.log('Entered...');
        console.log(studentData.id[0]);
        ;
</script>

<title>Student</title>
</head>
<body class="claro">

<form data-dojo-type="dijit/form/Form" id="student_form" name="student_form">

<div dojoType="dojox.widget.WizardPane" id="StudentWizPane" passFunction="SendForm">
            <div data-dojo-type="dojox.layout.TableContainer"
                data-dojo-props="cols:1,customClass:'employee_labels', labelWidth:180"
                id="StudentContainer">

            <div id= "studentGrid"></div>

</div>  

<!-- Other pages -->

Firebug 错误

在我看到的脚本选项卡下:

Object  error="Mozilla error: invalid scope variables"

【问题讨论】:

你能给jsfiddle提供demo吗? 提供一个小提琴会有点困难,因为 dgrid 是一个独立的插件,它不像 dojo 那样托管 【参考方案1】:

如果您真的希望 studentData 是全局的,只需删除 var 关键字。但是,我假设您实际上希望从网格中获取已编辑的数据,在这种情况下,我会执行以下操作:

diji.byId("studentGrid").store.query()...

【讨论】:

所有编辑过的数据都被推送回 studentData,所以我正在考虑将该对象发送到服务器。我仍然不清楚你的建议。即使我删除了 var 关键字,该对象也无法访问。

以上是关于Dojo 访问 js 文件外的 js 对象的主要内容,如果未能解决你的问题,请参考以下文章

如何在dojo工具包的Current JS文件中使用在另一个JS文件中创建的Dialog变量

如何在文件 .aspx.cs 文件后面的 C# 代码中从 .js 文件访问 javascript 对象

如何在 vue.js 应用程序中访问外部 json 文件对象

从 .js 函数访问 Dojox.mobile.TextBox 值?

访问多个 node.js 文件的单个 JavaScript 对象?

我的代码有啥问题(使用 dojo xhrGet Ajax)