Knockout.js 淘汰JS映射-保存不在数据库中的viewModel属性

Knockout.js 淘汰JS映射-保存不在数据库中的viewModel属性,knockout.js,knockout-mapping-plugin,Knockout.js,Knockout Mapping Plugin,我正在开发一个在线表单系统,表单需要随着时间的推移进行更新。我正在使用Knockout.js和映射插件来实现这一点,它工作得很好 然而,我遇到的一个问题是,它似乎拒绝保存ViewModel上不在从数据库加载的JSON对象中的任何属性。例如,如果保存到数据库的ViewModel如下所示: var viewModel = { prop1: ko.observable(""), prop2: ko.observable(""), prop3: ko.observableArra

我正在开发一个在线表单系统,表单需要随着时间的推移进行更新。我正在使用Knockout.js和映射插件来实现这一点,它工作得很好

然而,我遇到的一个问题是,它似乎拒绝保存ViewModel上不在从数据库加载的JSON对象中的任何属性。例如,如果保存到数据库的ViewModel如下所示:

var viewModel = {
    prop1: ko.observable(""),
    prop2: ko.observable(""),
    prop3: ko.observableArray()
};
我将“viewModel”变量初始化到此原型,然后从服务器加载JSON数据,
ko.mapping.fromJSON(数据,{},viewModel),这是预期的效果。这就是我的问题所在;如果我的viewModel现在有一个额外的属性,如:

var viewModel = {
    prop1: ko.observable(""),
    prop2: ko.observable(""),
    prop3: ko.observableArray(),
    prop4: ko.observableArray()
};
如果我加载基于firsts原型创建的JSON数据,我可以访问viewModel中的第四个属性,从数组中添加和删除并在屏幕上看到它的更新,但它不会使用
ko.mapping.toJSON(viewModel)
保存回数据库。我收集到的信息与“ko_mapping_”属性有关,这些属性被分配给使用mapping插件映射的viewModel部分。我很抱歉,如果这种情况已经解决之前,但我找不到答案

我需要能够更新viewModel的原型,因为它的特殊要求可能会随着时间的推移而略有不同。这可能发生在我的任何表单上,因此通用解决方案将是非常棒的


谢谢。

淘汰映射插件将自动创建必要的对象和可观察对象,以对您提供给它的JSON进行建模,因此通常更容易让它处理视图模型,因此它始终与您在服务器上拥有的内容保持最新:

var viewModel = function (data) {
    var model = ko.mapping.fromJS(data);

    // any custom observables not present in the JSON here

    return model;
}

我明白你的意思,但这对我的处境并没有什么好处。数据一开始不是JSON,而是用户输入,我使用敲除映射将其保存为数据库中的JSON。不过我非常感谢!