我有一個來自REST API的JSON數組。我正在使用Knockout映射插件來處理數組,並將JSON加載到預設的表單值中(如果用戶之前已將值添加到表單中 - 我有數據來測試Knockout數組)。該表格實質上添加或刪除了帶有輸入的div塊,以便用戶可以添加/刪除「工作」體驗。Knockout Mapping插件 - 捕獲數組值
我的問題是試圖破譯插件如何映射數組。我試圖在數組中找到某行的特定值(id),以便我可以將其添加爲變量以告訴API刪除該特定行。我可以讓Knockout顯式輸出HTML中的行值,但我無法弄清楚如何捕獲它。在模板「foreach」中,我有一個引用「remove:」的按鈕,這就是我試圖捕獲數組中值的地方。
對於在HTML示例:
此輸出「工作」的兩排對象沒有問題:
<span data-bind="text: ko.mapping.toJSON(workModel.work())"></span>
[{"id":"1","schoolID":"2","place":"","position":"Science Teacher","description":"I worked at ASD for 1 year as a Science teacher.","start":"2011","end":"2012","profileID":"91"},{"id":"2","schoolID":"1","place":"American School of Taiwan","position":"Science Guy","description":"I was just another science guy","start":"2008","end":"2011","profileID":"91"}]
此輸出陣列中的第一行和項的ID:
<span data-bind="text: ko.mapping.toJSON(workModel.work()[0].id)"></span>
"1"
但在JavaScript中,如果你點擊通過在foreach模板生成的刪除按鈕...
gone = function(work) {
alert(ko.mapping.toJSON(workModel.work(this).id));
}
在Firebug中給我這個錯誤,然後UI重新加載並刪除我剛纔單擊的模板塊。
Unable to parse bindings. Message: TypeError: workModel.work()[0] is undefined; Bindings value: text: ko.mapping.toJSON(workModel.work()[0].id)
即使這樣,如果我取代了明確的聲明上述警報:
gone = function(work) {
alert(ko.mapping.toJSON(workModel.work()[0].id));
}
我得到的「1」的正確值一次。我知道它與代碼的「this」方面有關,但我不確定映射插件正在做什麼,以便我可以捕獲陣列中的特定值......有道理?任何幫助將不勝感激。
對不起,試了一下,沒有去。如果我只是做一個簡單的'alert(self.workModel.work()。length);'我得到了所有數組的正確值。這只是我看不到的一個價值。 – user1557966 2012-07-31 16:45:42
我h你需要發佈更多的代碼。請發佈更完整的標記和JavaScript。 – 2012-07-31 17:02:05