knockout.mapping.js,是否可以只更新映射变量的一部分
knockout.mapping.js, Is it possible to update only a part of mapped variable?
在我的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]
正如您所看到的,数组中只有一个对象。另外两个是null。
现在使用敲除映射我可以做:
ko.mapping.fromJS([null, { Color: 55, Letter: "b", Points: 88 }, null], game.rack);
这样做正确地更新了我的视图,现在我只看到第二个位置上的字母B。另外两个是null。
我的问题是:我可以在不使用mapping.fromJS的情况下更新特定位置的值吗?
因此,假设我在索引0处有一个字母a,我想将第二个null更改为{ Color: 55, Letter: "b", Points: 88 }
并使我的UI自动更新以类似于此更改。如何做到这一点?
编辑:
我决定以约翰·厄尔斯的例子为例。不幸的是,我仍然有一个问题,因为我的数组是二维的。
这里有一个示例:http://jsfiddle.net/wgZ59/29/
(它与John Earles的例子非常相似,但包括二维数组)。
有人能指出为什么点击更改按钮不会更改元素的值吗?是否也可以在不调用HasMutted()的情况下更改它们的值?
以及最后一个(仅当前两个问题得到解决时)。是否可以静态创建html表(因为例如,我知道它将始终是3x3,所以我想要两个具有3行3列的打印表,然后将每个单独的单元格绑定到我的矩阵单元格。我已经尝试过了,但我遇到了问题,因为敲除没有单元格的值…
第2版:
我设法自己回答了以上问题,小提琴的例子在这里:
http://jsfiddle.net/wgZ59/44/
因此,当我以这种方式声明数组时,我可以制作一个静态表并绑定单个单元格:
self.matrix = ko.observableArray([[0,0,0],[0,0,0],[0,0,0]]);
或
self.matrix = ko.observableArray([[,,],[,,],[,,]]);
。
我可以更新值,它适用于静态表,但不适用于动态表(通过敲除动态创建)。您可以在fiddle页面上看到行为(此编辑开头的链接)。您知道为什么按下"更改"按钮不会更新动态创建的表中的值吗?
我不知道你到底想做什么,但如果game.rack是一个observableArray,那么你可以使用JavaScript来操作它。
这是关于observableArrays的文档页面:
http://knockoutjs.com/documentation/observableArrays.html
该页面显示了observableArray本身上可用的"helper"方法。此外,您可以操作底层数组,但必须在observableArray上调用"valueHasMutted()",让任何注册的侦听器了解更改。
这里有一个简单的JSFiddle显示操作:
http://jsfiddle.net/jearles/wgZ59/8/
- 如何在映射数组中添加换行符
- ng映射方向备选方案
- Knockout映射创建/更新出现问题
- 不可变,在映射内更新不返回正确的对象
- 挖空映射:加载数据后,父模型中的计算可观察量不会更新
- 如何在不使用映射的情况下更新视图模型
- 使用不可变 JS 更新映射列表中的一个键
- ASP.net MVC/Knockout JS 映射 - 无法更新视图模型
- 不可变.js映射集与更新
- KnockoutJS:使用映射将数据更新/插入到viewModel
- knockout.mapping.js,是否可以只更新映射变量的一部分
- 通过更新的lat&谷歌的lng将可拖动标记映射到另一个页面
- 推迟或暂停敲除中的依赖项评估,直到视图模型完全更新(例如使用映射插件)
- KnockoutJS绑定不使用映射插件进行更新
- 挖空映射插件[创建,更新]:对象已创建,无法更新
- 我如何在Knockout中更新映射的内部数组而不更新主数组中的数组对象的数量
- Knockout.js:更新用映射插件加载的对象
- 扩展AngularJS $resource来映射Rails rest式路由(特别是$save来创建和更新)
- 不可变js-创建或更新嵌套在映射中的列表
- 敲除映射>映射的数组总是更新的