0

私は_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

2 つのオプションがすぐに思い浮かびます。

  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")
        });

2番目は次のようになります。

_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に供給するために を使用することもできます。ラッパーをセットアップする方法は他にもあります。ここでは、シンプルで理解しやすいものを使用します。itembind

どちらがより適切に機能するかは、特定の状況によって異なります。

于 2013-02-22T05:17:01.530 に答える