【发布时间】:2014-04-04 15:59:20
【问题描述】:
我有一个带有 Dgrid 的 Dojo 应用程序。我想将保存 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 文件中访问 studentData。 studentData 将由用户在 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 那样托管
标签: javascript scope dojo dgrid