在保持绑定的同时替换Knockout Model中的整个对象

Spe*_*ort 1 knockout.js

我似乎无法在KOs网站或Google搜索上找到任何文档来描述如何在保持绑定的同时更改视图模型中的整个对象.

$(function () {
    var stuff = {
        IntroData: {
            SomeObject: {
                Name: 'Hello'
            }
        }
    };

    var someObject = {
        Name: 'World'
    }
    window.viewModel = ko.mapping.fromJS(stuff);
    ko.applyBindings(window.viewModel);

    $("#btnUpdateSomeObject").click(function() {
        try
        {
            window.viewModel.IntroData.SomeObject = ko.mapping.fromJS(someObject);
        } catch(ex) {
            alert("Failure: " + ex.toString());
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

我有一个非工作小提琴,描述了这种情况:http://jsfiddle.net/W5X2b/

这可能吗?我觉得这对KO来说是一个巨大的缺点,或者我在某种程度上不恰当地使用它.

ebr*_*lil 6

你在使用中的问题ko.mapping.fromJS.
所以不ko.mapping.fromJS(someObject) 应该使用ko.mapping.fromJS(someObject, {}, window.viewModel.IntroData.SomeObject);.

  1. someObject 您的更新数据.
  2. {} 映射选项.
  3. window.viewModel.IntroData.SomeObject 要更新的目标对象.

工作演示

更新:
来自 KnockoutJS Mapping文档

ko.mapping.fromJS的第三个参数表示目标