2012-11-01 19 views
0

我使用knockoutjs.mapping來映射現有對象返回服務器是JSON。Knockjs映射數組未附加到父對象

該物品與購物車編輯器example類似,物品的主要區別已經存在。

這是我嘗試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」

我是什麼在這裏做錯了嗎?如何使購物車編輯器例子適應現有生產線?

+1

添加您的視圖模型和HTML擺弄。 –

+1

我們應該如何告訴你什麼時候你的刪除功能錯誤,當你不發佈它? – Tyrsius

+0

對不起,我更正了jsFiddle鏈接 –

回答

1

你已經被如何在javascript中工作this

因爲當你的removeItem方法被調用時,this將是實際的項目,例如, InvoiceItem而不是Invoice,所以你需要捕獲變量中的「其他」this,並在你的函數中使用它來訪問Invoice

所以你removeItem應該是這樣的:

var self = this; 

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

另見本Demo

你應該注意的是,cart editor example也使用了這種技術在removeLine方法

var self = this; 
self.removeLine = function(line) { self.lines.remove(line) };