Knockout JS Mapping - 保存不在数据库中的viewModel属性

时间:2013-06-26 16:23:50

标签: knockout.js knockout-mapping-plugin

我正在开发一个在线表单系统,其表单需要随时更新。我正在将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的原型,因为它的特定要求可能会随着时间的推移略有不同。这可能发生在我的任何形式上,因此通用的解决方案太棒了!

谢谢。

1 个答案:

答案 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;
}