1

我想为我的页面刷新模型绑定。正如文档所说,我使用 applyBindings 方法。我还需要在页面上使用一些视图模型。为此,我在绑定时使用对象包装器 +“with”关键字:

ko.applyBindings({ model1: {...}, model2: {...} });

<div data-bind="with: $root.model1"> ... </div>
<div data-bind="with: $root.model2"> ... </div>

在我不使用动态绑定更新之前它工作正常。如果我尝试在页面上添加其他视图模型,它不起作用:(

几段代码:

1)工作正常:

$("#b1").click(function () {
ko.applyBindings({
    myModel1: {
        MyText: ko.observable("Some text")
    },
    myModel2: {
        MyText: ko.observable("Some text")
    }
});

});

$("#b2").click(function () {
    ko.applyBindings({
        myModel1: {
            MyText: ko.observable("Some other text")
        },
        myModel2: {
            MyText: ko.observable("Some other text 2")
        }
    });
});

2)不起作用:

$("#b1").click(function () {
ko.applyBindings({
    myModel1: {
        MyText: ko.observable("Some text")
    }
});

});

$("#b2").click(function () {
    ko.applyBindings({
        myModel1: {
            MyText: ko.observable("Some other text")
        },
        myModel2: {
            MyText: ko.observable("Some other text 2")
        }
    });
});

据我了解,我们无法以这种方式绑定其他视图模型。我也尝试使用“ko.cleanNode()”方法,但它也不起作用。存储在http://jsfiddle.net/eN8dq/2/的完整代码示例

你能建议我如何在页面上添加额外的视图模型吗?谢谢!

4

2 回答 2

2

尽量不要强制绑定,而是更改已绑定模型的值:

var viewModel = function () {
    var self = this;

    self.myModel1 = ko.observable( {
        MyText: ko.observable("Some other text")
    });

    self.myModel2 = ko.observable({
        MyText: ko.observable("Some other text 2")
    });


    self.clickAction = function() {
        //do the trick of assigning value
        self.myModel1 ({
            MyText: ko.observable("Some another text")
        });
    };
};

ko.applyBindings(new viewModel());   
于 2012-06-27T11:56:02.673 回答
1

我对这种情况的解决方案:https ://github.com/sergun/Knockout-MultiModels

任何意见?

于 2012-06-27T15:56:25.453 回答