gpt4 book ai didi

javascript - knockout.mapping.js,是否可以只更新映射变量的一部分?

转载 作者:行者123 更新时间:2023-11-30 18:31:42 24 4
gpt4 key购买 nike

在我的 JS 中,我有以下 ajax 调用,它使用 knockout 映射插件绑定(bind)生成的 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]

如您所见,数组中只有一个对象。其他两个为空。

现在使用 knockout 映射我可以做到:

ko.mapping.fromJS([null, { Color: 55, Letter: "b", Points: 88 }, null], game.rack);

这样做正确地更新了我的 View ,现在我在第二个位置上只看到一个字母 B。其他两个为空。

我的问题是:我可以在不使用 mapping.fromJS 的情况下更新特定位置的值吗?

所以假设我在索引 0 处有一个字母 A,我想将第二个 null 更改为
{ 颜色:55,字母:“b”,点:88 }
并使我的 UI 自动更新以类似于此更改。如何才能做到这一点?


编辑:

我决定采用 John Earles 给出的示例。不幸的是我仍然有问题,因为我的数组是二维的。

这里有一个示例: http://jsfiddle.net/wgZ59/29/
(它与 John Earles 的示例非常相似,但包含二维数组)。

有人能指出为什么点击更改按钮不会更改元素的值吗?是否也可以在不调用 HasMutated() 的情况下更改它们的值?

还有最后一个(前提是前两个都解决了)。是否可以静态创建 html 表(因为例如我知道它总是 3x3,所以我想要两个 3 行 3 列的打印表,然后将每个单独的单元格绑定(bind)到我的矩阵单元格。我已经试过了,我有问题,因为 knockout 没有细胞的值(value)...


编辑2:

我自己设法回答了上述问题, fiddle 示例在这里:

http://jsfiddle.net/wgZ59/44/

因此,当我以这种方式声明数组时,我可以创建一个静态表并绑定(bind)各个单元格:

self.matrix = ko.observableArray([[0,0,0],[0,0,0],[0,0,0]]);

self.matrix = ko.observableArray([[,,],[,,],[,,]]);

我可以更新值并且它适用于静态表,但它不适用于动态表(由 knockout 动态创建)。您可以在 fiddle 页面上看到行为(此编辑开头的链接)。您知道为什么按下“更改”按钮不会更新动态创建的表中的值吗?

最佳答案

我不知道你到底想做什么,但如果 game.rack 是一个 observableArray 那么你可以使用 JavaScript 来操作它。

这是关于 observableArrays 的文档页面:

http://knockoutjs.com/documentation/observableArrays.html

该页面显示了可在 observableArray 本身上使用的可用“辅助”方法。此外,您可以操作底层数组,但随后您必须在 observableArray 上调用“valueHasMutated()”,让所有已注册的监听器了解更改。

这是一个简单的 JSFiddle 显示操作:

http://jsfiddle.net/jearles/wgZ59/8/

关于javascript - knockout.mapping.js,是否可以只更新映射变量的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9454723/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com