gpt4 book ai didi

knockout.js - 在运行时向模型添加 observables。但 ko.mapping.toJS 不返回它们

转载 作者:行者123 更新时间:2023-12-04 18:14:46 24 4
gpt4 key购买 nike

js 和 knockout 映射插件

我的问题是这样的:

我有模型,我在运行时向它添加 observables,如下所示:

viewModel[value] = new ko.observable(valueFromTextBox);

这工作正常,可观察对象绑定(bind)到屏幕,这部分工作正常
有问题的部分是当我尝试采用该模型并将其转换为 JSON 时,如下所示:
var JSON = ko.mapping.toJS(page.model);

当我调试它时,我看到 page.model 具有所有新的 observables。但我最终的 JSON 只有模型中的那些。不是稍后在运行时添加的。
在运行时添加可观察对象的正确方法是什么?

谢谢

编辑:

我将描述我的整个场景,然后发布我的解决方案作为答案。

我正在使用 ASP.Net MVC,我创建了一个 View 模型,然后进行了 ajax 调用以从服务器接收我的实际模型。然后使用:
ko.mapping.fromJS(model, page.model);

之后,当用户添加我使用的新字段时,绑定(bind)会发生:
viewModel[value] = new ko.observable(valueFromTextBox);

最后在将其发送回我使用的服务器之前:
 var JSON = ko.mapping.toJS(page.model);

在这一点上,JSON 中不存在添加的字段。

最佳答案

调试后

ko.mapping.fromJS(model, page.model);

我意识到该函数读取字典中的值
    __ko_mapping__.mappedProperties

这是在使用 toJS 函数期间创建的
var JSON = ko.mapping.toJS(page.model);

无论如何,因为 __ko_mapping__.mappedProperties 中不存在我新添加的 observables字典他们
使用 ko.mapping.toJS 函数返回给我的 JSON 对象中也不存在
所以我做了什么让它工作是这样的:
viewModel[value] = ko.observable(valueFromTextBox);
viewModel.__ko_mapping__.mappedProperties[value] = true;

我在模型中添加了一个 observable,但也更新了 mappedProperties 字典
就是这样。现在调用 ko.mapping.toJS我的整个模型作为 JSON 对象返回,包括我添加的 observables。

我意识到这可能不是最优雅的方式。但它确实很好用。

关于knockout.js - 在运行时向模型添加 observables。但 ko.mapping.toJS 不返回它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11949544/

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