我正在将_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")
});
},
但是项目未定义。关于如何做的任何想法?我需要为我的视图使用相同的模型来捕获从我的模型触发的任何事件,即项目。
答案 0 :(得分:0)
立即想到两个选项:
item
作为属性存储在this
。第一个看起来像这样:
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
。还有其他方法来设置包装器,我只想在这里找到简单易懂的东西。
哪一个更适合您,取决于您的具体情况。