4

$.ajax所以我正在尝试使用 jQuery 的延迟(以及返回承诺的事实)来处理一些异步代码。

这是一个快速示例,它显示了正在发生的事情

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_id被称为之前update_model,我不知道如何让它发生相反的方式。

在实际示例中,我尝试保存从 1 到 100 个模型的任意位置,并且我需要从这些模型中获取 ID,然后才能进行下一步。

我在这里缺少一些基本的东西吗?


编辑

update_model确实被调用了——它只是发生在print_id. 另外,我尝试过使用该done方法model_promise,然后使用then

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

但随后update_model没有收到必要的论据。

4

1 回答 1

1

问题是您的延迟在成功方法中解决。要使用带有 ajax 方法的延迟,请使用该deferred.done().then()模式(查看此处的“jqXHR 对象”部分:http://api.jquery.com/jQuery.ajax/

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 回答