4

だから私は$.ajaxいくつかの非同期コードを処理するために、jQuery の deferred (およびそれが promise を返すという事実) を使用しようとしています。

何が起こっているかを示す簡単な例を次に示します

var update_model = function(model, resp){
    model.set('id', resp.id);
    m = model;
};

var print_id = function(){
    console.log(m.get('id'));
};

var MyModel = Backbone.Model.extend({});
var m = new MyModel({title: 'test'});

var model_promise = m.save({author: 'me'}, {success: update_model});

$.when(model_promise).then(print_id);

問題は、print_idBEFORE が呼び出されupdate_modelていることであり、それを逆にする方法がわかりません。

実際の例では、1 から 100 までのモデルを保存しようとしています。次のステップに進む前に、これらのモデルから ID を取得する必要があります。

ここで基本的なものが欠けていますか?


編集

update_modelは呼び出されます - それは . の後に発生しprint_idます。また、doneメソッド onmodel_promiseを使用してから、次を使用してみましたthen:

model_promise.done(update_model).then(print_id);

しかし、それupdate_modelは必要な引数を受け取りません。

4

1 に答える 1

1

問題は、遅延が成功メソッドで解決されることです。ajax メソッドで deferred を使用するには、パターンを使用します ( http://api.jquery.com/jQuery.ajax/deferred.done().then()の「jqXHR オブジェクト」セクションを参照してください)。

var update_model = function(model, resp){ 
  model.set('id', resp.id); 
  m = model; 
};

var print_id = function(){ 
  console.log(m.get('id')); 
};

var MyModel = Backbone.Model.extend({}); 
var m = new MyModel({title: 'test'});

var $model_promise = m.save({author: 'me'});

$model_promise.done(update_model).then(print_id);
于 2012-08-09T20:33:42.123 に答える