Dojo访问js文件外的js对象

时间:2014-04-04 15:59:21

标签: javascript scope dojo dgrid

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

应用程序表单使用 dojo向导,因此当用户点击向导上的下一个要移动到另一个页面时,我想提交数据( javascript object)从当前页面到服务器进行验证和处理。

我面临的问题是 javascript 对象的范围。我将 javascript 对象( studentData )移动到全局范围,但问题仍然存在。 Under是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'电话'发送表格'功能

如何访问 SendForm 功能或任何其他 javascript 文件中的 studentData studentData 将由网格

上的用户操纵
!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"}

1 个答案:

答案 0 :(得分:0)

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

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