2012-06-27 20 views
1

我想为我的页面刷新模型绑定。正如所说的文档我使用applyBindings方法。 此外,我需要在页面上使用少数viewModels。要做到这一点,我使用object-wrapper +“带”关键字绑定:如何在Knockout JS中强制应用绑定

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

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

它工作正常,直到我不使用动态绑定更新。如果我尝试在页面上添加额外的ViewModels,它不工作:(

很少的代码段:

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/

的全部代码示例您能否告诉我如何在页面上添加额外的视图模型?谢谢!

回答

1

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

有何评论?

+0

这应该可以很好地工作,而且如果我早点看到了这个问题,本来应该是我的答案。 – daedalus28

+0

理论上可以进行绑定吗?例如实际#元素不存在,直到在未来的ajax更新 – Adaptabi

+0

@DotNetWise是 –

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()); 
+0

不,不幸的是。我不知道第一次applyBindinds调用将来需要多少个viewmodels。 –

+2

你有没有想过使用可观察视图模型的observableArray? – pocheptsov

+0

我无法想象它是如何工作的。你能提供一小段代码吗? –