在我的JS中,我有以下ajax調用,它使用挖空映射插件綁定生成的json。knockout.mapping.js,是否有可能僅更新映射變量的一部分?
$.getJSON("/Game/GetRack", function (data) {
game.rack = ko.mapping.fromJS(data);
ko.applyBindings(game.rack, $('.rack')[0]);
});
/Get/GetRack
回報:
[{"Color":3,"Letter":"a","Points":5},null,null]
正如你所看到的,只有一個數組中的對象。另外兩個是空值。
現在使用的淘汰賽映射我可以這樣做:
ko.mapping.fromJS([null, { Color: 55, Letter: "b", Points: 88 }, null], game.rack);
這樣做正確更新我的看法,現在我只看到在第二位置的字母B。另外兩個是空值。
我的問題是:我可以在不使用mapping.fromJS的情況下更新特定位置的值嗎?
因此,假設我有一個字母A在索引0,我想第二個空更改爲
{ Color: 55, Letter: "b", Points: 88 }
,讓我的用戶界面自動更新到類似這種變化。如何才能做到這一點?
編輯:
我決定去與約翰Earles給出的例子。不幸的是我仍然有一個問題,因爲我的數組是二維的。
您在這裏有一個例子: http://jsfiddle.net/wgZ59/29/
(它非常類似於約翰Earles'的例子,但包括二維陣列)。
有人能指出爲什麼點擊更改按鈕不會改變元素的值嗎?是否也可以在不調用HasMutated()的情況下更改它們的值?
最後一個(只有前兩個解決了)。是否可以靜態創建html表格(因爲例如我知道它總是3x3,所以我想要兩個具有3行和3列的打印表格,然後將每個單獨的單元格綁定到我的矩陣單元格中。問題,因爲淘汰賽沒有爲單元格中的數值...
EDIT2:
我設法回答我上面的問題我自己,小提琴例子是在這裏:
所以,我可以E中的靜態表和結合的單個細胞,當我聲明數組這樣:
self.matrix = ko.observableArray([[0,0,0],[0,0,0],[0,0,0]]);
或
self.matrix = ko.observableArray([[,,],[,,],[,,]]);
。
我可以更新的價值和它的工作原理爲靜態表,但它並不適用於動態表(淘汰賽動態創建的)工作。您可以在小提琴頁面上看到行爲(在編輯開始時鏈接)。你知道爲什麼按下「更改」按鈕不會更新動態創建的表中的值嗎?
感謝約翰。我決定遵循你的設計模式,但我仍然有問題。你能看看我的編輯? – 2012-02-26 21:17:23
淘汰賽真的只是喜歡與物體一起工作。依賴性跟蹤在跟蹤$數據引用時遇到了問題。下面的小提琴奏效,但它需要你改變成一個簡單的對象數組:[{v:1},{v:2},{v:3}]。 http://jsfiddle.net/jearles/wgZ59/46/使用對象的一個好處是映射器會將它們變成可觀察對象,並且由於您現在正在更改可觀察對象,因此不需要'valueHasMutated()'調用了。 – 2012-02-26 23:59:26
我在原始場景中使用對象。我只是不知道這可能會影響我發佈在jsfiddle上的情況。我可以從這裏繼續,再次感謝:)。 – 2012-02-27 08:30:29