我正在开发一个在线表单系统,其表单需要随时更新。我正在将Knockout.js与Mapping插件结合使用来实现这一点并且运行良好。
然而,我遇到的一个问题是它似乎拒绝在ViewModel上保存任何属性,这些属性不在从数据库加载的JSON对象中。例如,如果保存到DataBase的ViewModel看起来像这样:
var viewModel = {
prop1: ko.observable(""),
prop2: ko.observable(""),
prop3: ko.observableArray()
};
我将“viewModel”变量初始化为此原型,然后从服务器ko.mapping.fromJSON(data, {}, viewModel);
加载我的JSON数据,这可以按预期工作。这是我的问题所在;如果我的viewModel现在有一个额外的属性,如:
var viewModel = {
prop1: ko.observable(""),
prop2: ko.observable(""),
prop3: ko.observableArray(),
prop4: ko.observableArray()
};
如果我加载基于第一个原型创建的JSON数据,我可以访问viewModel中的第四个属性,添加和删除数组并在屏幕上看到它更新,但它不会使用{保存回数据库{1}}。我正在收集这与“ ko _mapping_”属性有关,这些属性被分配给使用映射插件映射的viewModel部分。如果之前已经解决了这种情况,我很抱歉,但我找不到答案。
我需要能够更新viewModel的原型,因为它的特定要求可能会随着时间的推移略有不同。这可能发生在我的任何形式上,因此通用的解决方案太棒了!
谢谢。
答案 0 :(得分:0)
Knockout映射插件将自动创建必要的对象和可观察对象来为您提供的JSON建模,因此通常更容易让它关注视图模型,因此它始终与您在服务器上拥有的内容保持同步:
var viewModel = function (data) {
var model = ko.mapping.fromJS(data);
// any custom observables not present in the JSON here
return model;
}