1

ウィジェットのメソッドから deferred を返すのに少し問題があります。メソッド自体は xhrPost であるため、Deferred を返します。コードはそのままです (Dojo 1.8 を使用)

コーリング コード:

quorum = registry.byId("quorumPanel");

var deferredResponse = quorum.updateSelectionCount();

deferredResponse.then(function(data){
    console.log("Success: ", data);
}, function(err){
    console.log("Error: ", err);
});

およびウィジェット内のコード:

updateSelectionCount: function() {

    var self = this;

    var deferredResponse = xhr.post({
        url: "ajxclwrp.php",
        content: [arguments here],
        handleAs: "json"});

    deferredResponse.then(function(response) {

    var anotherDeferred = new Deferred();

        var _boolA = true;
        var _boolB = true;
        dojo.forEach(response.result, function(relationshipInfo){
            [do a bunch of stuff here too set _boolA and/or _boolB]
        });

        self._sethasRequiredAttr(_hasRequired);
        self._setHasRequestedAttr(_hasRequested);
        self.quorumInfo.innerHTML = quorumHtml;

        // Below is not working 
        anotherDeferred.resolve('foo');
        return anotherDeferred;

    });

}

別の promise を設定し、promise/all を使用する必要がありますか? この時点で私は混乱/不満を感じています。

ティア。

4

1 に答える 1

2

.then() メソッドは別の deferred を返します。returnステートメントを入れるだけです。

updateSelectionCount: function() {

    var self = this;

    var deferredResponse = xhr.post({
        url: "ajxclwrp.php",
        content: [arguments here],
        handleAs: "json"});

    return deferredResponse.then(function(response) {

        var _boolA = true;
        var _boolB = true;
        dojo.forEach(response.result, function(relationshipInfo){
            [do a bunch of stuff here too set _boolA and/or _boolB]
        });

        self._sethasRequiredAttr(_hasRequired);
        self._setHasRequestedAttr(_hasRequested);
        self.quorumInfo.innerHTML = quorumHtml;

        return "foo";
    });

}
于 2013-02-06T14:31:37.893 に答える