2017-06-26 2 views
0

Ich versuche, einen Dojo Store wie hier beschrieben https://dojotoolkit.org/documentation/tutorials/1.10/creating_stores/ zu erstellen, aber ich muss eine vorhandene Datenabruf-API in die Abfrage implementieren. Speziell die Mx.data.get von https://apidocs.mendix.com/7/client/mx.data.htmlDojo Store/QueryResults basierend auf vorhandenen Async-Funktion mit Rückruf

Meine QueryResults sind immer leer, und ich denke, es ist, weil API verwende ich einen Rückruf und liefert keine Versprechen.

query: function (query, options) {  
    var deferred = new Deferred(); 
    this.getResults(query, function (error, result) { 
    if (error) { 
     deferred.reject(error); 
    } else { 
     deferred.resolve(result); 
    } 
    }); 
    return QueryResults(deferred.promise); 
}, 

getResults: function (query) { 
    mx.data.get({ 
    xpath: "//System.User", 
    filter: { 
     sort: [["Name", "asc"]], 
     offset: 0, 
     amount: 10 
    }, 
    callback: function(objs) { 
     return(objs); 
    } 
    }); 
} 

Ich sehe der Code ausgeführt wird, aber die resultierenden objs nie zurückgegeben, die QueryResults sind immer leer. (Ich habe auch versucht QueryResults(deferred) aber mit der gleichen Wirkung

Jeder hier, der mir helfen kann die mx.data.get geeignet zu machen, wenn zu verwenden, um eine Herstellung QueryResults

Antwort

0

Und am nächsten Morgen ist alles klar:.? Einfach notwendig, um Verschieben Sie die deferred.resolve innerhalb des Rückrufs.

query: function (query, options) {  
    this.deferred = new Deferred(); 
    this.getResults(query); 
    return QueryResults(deferred); 
}, 

getResults: function (query) { 
    mx.data.get({ 
    xpath: "//System.User", 
    filter: { 
     sort: [["Name", "asc"]], 
     offset: 0, 
     amount: 10 
    }, 
    callback: lang.hitch(this, function(objs) { 
     this.deferred.resolve(objs); 
     }); 
    } 
    }); 
} 
Verwandte Themen