在同步回调中​​访问Backbone模型

时间:2013-02-22 04:43:25

标签: backbone.js

我正在将_model传递给我的ProcessModel函数,然后在我的ProcessModel函数中将模型保存到服务器,而服务器又返回触发sync事件。我想要做的是在我的sync回调访问权限_model中,因为CartView正在侦听来自_model的添加或更改事件。我有意义吗?

var _cartItem  = this.ConvertToSaleItem(item);
_cartItem.on('sync', this.TaxChangeSaveSuccess,  this);
_cartItem.on('error', this.TaxChangeSaveError, this);

_cartItem.url = Global.ServiceUrl + Service.SOP + Method.SALEITEMTAX;
_cartItem.save();

我的回调:

TaxChangeSaveSuccess : function(model, response, options) {
    if(!Global.isBrowserMode) window.plugins.cbNetworkActivity.HideIndicator();
        item.set({
            SalesTaxAmountRate : model.get("SalesTaxAmountRate")
        }); 
    },

但是项目未定义。关于如何做的任何想法?我需要为我的视图使用相同的模型来捕获从我的模型触发的任何事件,即项目。

1 个答案:

答案 0 :(得分:0)

立即想到两个选项:

  1. item作为属性存储在this
  2. 使用匿名函数包装器手动完成。
  3. 第一个看起来像这样:

    this.item = item;
    _cartItem.on('sync', this.TaxChangeSaveSuccess,  this);
    
    //...
    
    TaxChangeSaveSuccess : function(model, response, options) {
        if(!Global.isBrowserMode) window.plugins.cbNetworkActivity.HideIndicator();
            this.item.set({
                SalesTaxAmountRate : model.get("SalesTaxAmountRate")
            });
    

    第二个看起来像这样:

    _cartItem.on('sync', _(function(model, response, options) {
        this.TaxChangeSaveSuccess(model, response, options, item);
    })).bind(this));
    
    //...
    
    TaxChangeSaveSuccess : function(model, response, options, item) {
        // Same stuff you have already
    

    您还可以使用_.bind使用item的部分应用功能向回调函数提供bind。还有其他方法来设置包装器,我只想在这里找到简单易懂的东西。

    哪一个更适合您,取决于您的具体情况。