2012-04-30 11 views
1

私はサーバー上のRESTful APIと通信するためにDojo JsonRESTストアを使用しています。非同期コールバックハンドラを使用すると、GETメソッドとQUERYメソッドがうまく機能します。しかし、JsonRESTストアに新しいオブジェクトをポストするPUTリクエストは、非同期コールバック機能を持っていないようです。 PUT要求が完了して成功した場合にのみイベントを発生させることは不可能です。Dojo:コールバック・メソッドを使用してjsonRestストアでPUT要求を行う方法

require(["dojo/store/JsonRest"], function(JsonRestStore){ 
    var store = new JsonRestStore({target: "/Table/" }); 

    store.get(3).then(function(object){ 
     // CALLBACK HERE :-) 
    }); 

    store.query("foo=bar").then(function(results){ 
     // CALLBACK HERE :-) 
    }); 

    store.put({ foo: "bar" }, { id: 3 }); // NO CALLBACK CAPABILITIES ??? 

    store.remove(3); // NO CALLBACK CAPABILITIES ??? 
}); 

任意のアイデア:ドキュメント(http://dojotoolkit.org/reference-guide/1.7/dojo/store/JsonRest.html)から

おかげ

答えて

2

あなたはstore.put({ foo: "bar" }, { id: 3 }).then(function(){});store.remove(3).then(function(){});を使用してみましたか? these docsthis postを確認してください。

+0

あなたは正しいです。ソースコードを見ると、返されたオブジェクトはDeferredであることがわかります。しかし、バグ(Dojo 1.8で修正予定)は、 'store.put({foo:" bar "}、{id:3})のようにヘッダ応答を返すことを不可能にします。メッセージ、ioArgs){}); 'ここで' ioArgs'は未定義です。 –

+0

var deferred = put(item); deferredオブジェクトを取得します。次に、コールバックを追加して、ioArgsのxhrオブジェクトにアクセスします。def.addCallback(function(mess、io){ console.log(io); console.log(mess); console.log(def.ioArgs.xhr.getAllResponseHeaders()); }); –

1
put: function(object, options){ 
    // summary: 
    //  Stores an object. This will trigger a PUT request to the server 
    //  if the object has an id, otherwise it will trigger a POST request. 
    // object: Object 
    //  The object to store. 
    // options: dojo.store.api.Store.PutDirectives? 
    //  Additional metadata for storing the data. Includes an "id" 
    //  property if a specific id is to be used. 
    // returns: Number 
     .... 
     return xhr(....); 
    } 

ドキュメントは間違っていますが、返品は実際にはdojoです。記載されているとおりです。

は、関数プロトタイプは、関数(responseText、ioArgs)を読み取ることを期待

+0

あなたは正しいです。しかし、私が別のコメントで述べたように、Dojo 1.8で修正されるはずのバグは、 'store.put({foo:" bar "}、{id:3 })then then(function(message、ioArgs){}); 'ここで' ioArgs'は未定義です。 –

0

道場のドキュメントでは、PUTストアを更新するためであるとして、新しい項目を追加するためにあなたは、POSTを使用する必要があると述べています。

関連する問題