jQuery延迟问题和Backbone在保存时的成功方法问题

时间:2012-08-09 20:20:49

标签: jquery backbone.js jquery-deferred

所以我试图使用jQuery的延迟(以及$.ajax返回一个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_id被称为update_model之前,我不知道如何以相反的方式实现它。

在实际示例中,我正在尝试保存1到100个模型,我需要从这些模型中获取ID才能进入下一步。

我错过了一些基本的东西吗?

<小时/> 的修改

update_model会被调用 - 它只是在print_id之后发生的。另外,我尝试在done上使用model_promise方法,然后使用then

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

但是update_model没有得到它必要的论据。

1 个答案:

答案 0 :(得分: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);