0

我将 a 传递_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")
        }); 
    },

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

4

1 回答 1

0

立即想到两个选项:

  1. item作为属性存储在您的this.
  2. 使用匿名函数包装器手动完成。

第一个看起来像这样:

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还有其他设置包装器的方法,我只是在这里简单易懂。

哪一种更适合您取决于您​​的具体情况。

于 2013-02-22T05:17:01.530 回答