0

サーバーがJSONの場合、ノックアウトjs.mappingを使用して既存のオブジェクトの戻り値をマップします。

オブジェクトはカート エディターの例に似ていますが、アイテムの主な違いは既に存在します。

ここに私の試みがありますhttp://jsfiddle.net/9ej3r/

マッピングは簡単です:

var mapping = {
            'Items': {
                create: function(options) {
                    return new InvoiceItem(options.data);
                },
                key: function(data){
                    return ko.utils.unwrapObservable(data.ID);
                }
            }
        };

削除をクリックすると、「this.Items in undefined」というエラーが表示されます

ここで何が間違っていますか?カート エディターの例を既存の行で動作させるにはどうすればよいですか?

4

1 に答える 1

1

あなたはthis、javascript でどのように機能するかという事実に悩まされてきました。

removeItemメソッドが呼び出されると、thisが実際のアイテムになるInvoiceItemため、変数にInvoice「その他」をキャプチャし、関数でそれを使用してにアクセスする必要があります。thisInvoice

したがって、次のremoveItemようになります。

var self = this;

this.removeItem = function (item) { 
   self.Items.remove(item);
}

このデモも参照してください。

カート エディターの例でも、この手法をremoveLineメソッドで使用していることに注意してください。

var self = this;
self.removeLine = function(line) { self.lines.remove(line) };
于 2012-11-02T09:09:10.200 に答える