[英]pass info from one Dojo AMD module to another
我正在使用Dojo 1.8中的模块,并且有一个如下定义的模块:
define(["dojo/request/xhr", "dojo/json"],
function(xhr, JSON) {
var url = "server/provider.php";
return {
files: {},
getDirList: function() {
var self = this;
xhr(url).then(function(response) {
response = JSON.parse(response);
// would love to return the JSON for use here
}, function(err) {
console.error(err);
});
}
};
});
我还有一个模块可以在其中调用该方法然后使用它:
define(["dojo/dom",
"dojo/dom-construct",
"dojo/_base/array",
"afm/utils"
],
function(dom,domConst,array, utils) {
return {
produceHtml: function() {
var json = utils.getDirList(); //this returns undefined
var dirLength = json.length;
console.log(json);
for (var i = 0; i < json.length; i++) {
if(i % 2 === 0) {
domConst.place('<tr class="even"><td>' + json[i].name + '</td></tr>', 'output');
} else {
domConst.place('<tr><td>' + json[i].name + '</td></tr>', 'output');
}
}
}
};
});
自然地,我可以将DOM创建代码放入util模块中,但这是将视图逻辑混合在不应有的位置。 如果我想重用util.getDirList方法,这很可怕。
如何使用该方法返回的JSON? 还有其他人这样做吗?
dojo / request / xhr调用的结果是异步传入的,因此仅在返回后才设置响应参数。 您想要的是返回一个Promise(在此处阅读: http : //dojotoolkit.org/documentation/tutorials/1.8/promises/ )。
但首先:您可以使dojo / request为您解析json数据,如下所示:
require(['dojo/request'],function(request) {
request.get('http://example.com/data.json', {handleAs:'json'}).then(...)
})
参见此处: http : //dojotoolkit.org/reference-guide/1.8/dojo/request.html#dojo-request
现在结合起来,您的getDirList函数可能就是:
getDirList: function() {
return xhr.get(url, {handleAs:'json'});
}
然后在您的ProduceHtml中,您将执行以下操作:
utils.getDirList.then(function(json) {
for (var i = 0; i < json.length; i++) {
if(i % 2 === 0) {
domConst.place('<tr class="even"><td>' + json[i].name + '</td></tr>', 'output');
} else {
domConst.place('<tr><td>' + json[i].name + '</td></tr>', 'output');
}
});
在第二个模块中,不应该
define(["dojo/dom",
"dojo/dom-construct",
"dojo/_base/array",
"afm/utils"
],
function(dom,domConst,array) {
成为
define(["dojo/dom",
"dojo/dom-construct",
"dojo/_base/array",
"afm/utils"
],
function(dom,domConst,array, utils) {
?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.