在我的 JS 中,我有以下 ajax 调用,它使用敲除映射插件绑定生成的 json。
$.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 的情况下更新特定位置的值吗?
因此,假设我在索引 0 处有一个字母 A,我想将第二个 null 更改为
{ Color: 55, Letter: "b", Points: 88 }
并使我的 UI 自动更新以类似于此更改。如何才能做到这一点?
编辑:
我决定采用 John Earles 给出的例子。不幸的是我还有一个问题,因为我的数组是二维的。
您在这里有一个示例:http:
//jsfiddle.net/wgZ59/29/
(它与 John Earles 的示例非常相似,但包括二维数组)。
有人能指出为什么单击更改按钮不会更改元素的值吗?是否也可以在不调用 HasMutated() 的情况下更改它们的值?
最后一个(只有在前两个解决的情况下)。是否可以静态创建 html 表(因为例如我知道它总是 3x3,所以我想要两个 3 行 3 列的打印表,然后将每个单独的单元格绑定到我的矩阵单元格。我已经尝试过了,我有问题,因为敲除没有细胞的值......
编辑2:
我设法自己回答了上述问题,小提琴示例在这里:
因此,当我以这种方式声明数组时,我可以制作一个静态表并绑定单个单元格:
self.matrix = ko.observableArray([[0,0,0],[0,0,0],[0,0,0]]);
或者
self.matrix = ko.observableArray([[,,],[,,],[,,]]);
.
我可以更新这些值,它适用于静态表,但不适用于动态表(由淘汰赛动态创建)。您可以在小提琴页面上看到行为(此编辑开头的链接)。您知道为什么按“更改”按钮不会更新动态创建的表中的值吗?