使用Dojo在require中返回值

4

如何在dojo require块内返回一个值? 假设我有这样的设置:

<div class = "people">
    <span class = "name"> Joe Bloggs </span> the Baker <br />
    <span class = "name"> John Smith </span> the Chef <br />
</div>


function getNames () {
    require(["dojo/query", "dojo/domReady!"], function(query) {

        var names = [];
        query (".name").forEach (function (node) {
            names.push (node.innerHTML);
        });

        return names;
    });
}

function doSomethingWithNames () {

    var names = getNames (); // names is always undefined

}

我知道为什么会发生这种情况 - require块是异步执行的,因此在doSomethingWithNames中分配变量名之前,getNames已经返回了。但是我该如何解决这个问题呢?


1
你可以像crowebird所说的那样使用回调函数,或者你可以使用dojo.deferred功能。就像这个例子:http://stackoverflow.com/questions/17406681/how-to-wait-till-require-finished-in-dojo/17407020#17407020 - tik27
1个回答

4

添加自定义回调函数:

function getNames (callback) {
    require(["dojo/query", "dojo/domReady!"], function(query) {

        var names = [];
        query (".name").forEach (function (node) {
            names.push (node.innerHTML);
        });

        callback(names);
    });
}

function doSomethingWithNames () {

    getNames (function(names) {
        //do your stuff with the return here
        //names will now be populated
    });

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接