这是我的源代码:
<script>
function sendText(){
require([ "dijit/form/Button", "dojo/_base/xhr"],
function(Button,xhr) {
xhr.post({
url: "validURL1.html",
form: dojo.byId("myForm"),
load: function(data){
var newStore =
new ItemFileWriteStore({url:'validURL2.html'});
dijit.byId("grid").setStore(newStore);
},
error: function(error){
alert("error!");
}
});
});
}
</script>
<button data-dojo-type='dijit.form.Button' onClick ='sendText()'>submit</button>
但是当我按下按钮并尝试将数据发布到服务器时,firebug说:
_145未定义
我的代码出了什么问题? 什么是错误'_145'?
更新
<script>
require([ "dijit/form/Button", "dojo/_base/xhr","dijit/form/Form", "dojo/data/ItemFileWriteStore",
"dojo/dom-form","dijit/registry","dojo/ready", "dojox/grid/EnhancedGrid"],
function(Button,xhr, Form, ItemFileWriteStore, domForm, registry,ready, EnhancedGrid) {
var hasBeenSent = false;
window.sendText = function() {
xhr.post({
url: "validURL1.html",
form: dojo.byId("myForm"),
handleaAs: "text",
load: function(data) {
var newStore = new ItemFileWriteStore({url:'validURL2.html'});
dojo.byId("grid").setStore(newStore);
},
error: function(error){
alert("error!");
},
handle: function() {
hasBeenSent = true;
}
});
}
});
</script>
现在说:
TypeError: dojo.byId("grid").setStore is not a function
但是,我需要“enhancedGrid”。那么也许我应该要求一些其他的模块或类?
答案 0 :(得分:1)
您正在使用dojo的压缩/缩小版本。执行此操作的算法将用较小的名称替换变量名称(即_145)以减小javascript文件的大小。
查看压缩的dojo文件,我发现了这个:
function formToObject(_145){var ret={},_146=dom.byId(_145).elements;
我猜我dojo.byId("myForm")
没有退回你的表格。
我还建议您设置开发环境,以便能够使用未压缩的文件。它将允许在浏览器中进行更好的调试。
http://swingingcode.blogspot.com/2012/03/dojo-configurations.html
答案 1 :(得分:1)
将dojo.byId(“grid”)更改为 dijit.byId(“grid”),因为对dojo.byId(“grid”)的调用只会返回DOMNode而不是Widget。
另外,如果'grid'是标记声明,请确保dojo.parser.parse()已运行。如果设置了parseOnLoad:true,则需要等待dojo.ready触发,例如dojo.ready(function() { require.... });
或require(["dojo/domReady!", ....], function(..) { XHR });
如果只需要在require语句中调用update-xhr,那么这个结构最好表现得更好。
require([
"dojo/parser", // Pull in parser to manually run it if parseOnLoad is not set true
"dijit/form/Button",
"dojo/_base/xhr",
...
"dojox/grid/EnhancedGrid",
"dojo/domReady!" // Wait untill DOM is done loading and all of the dojo base has been prepared
], function(
Parser,
Button,
...
) {
Parser.parse();
var hasBeenSent = false;
window.sendText = function() {
xhr.post({
url: "sample/update.html",
form: dojo.byId("updateUser"),
handleaAs: "text",
load: function(data) {
var newStore = new ItemFileWriteStore({url:'sample/userLissts.html'});
dijit.byId("grid").setStore(newStore);
},
error: function(error){
alert("error!");
},
handle: function() {
hasBeenSent = true;
}
});
}
});