2014-06-23 31 views
0

我使用knockoutjs与模板插件(Using Underscore Template with Knockout using interpolate due to asp.net) 如果我有一个报头和一个列表:Knockoutjs和改变模板动态

<ul data-bind="template: { name: 'people' }"></ul> 
<script type="text/html" id="people"> 
    <h2>{{= hdr}}</h2> 
    {{ _.each(people(), function(item) { }} 
     <li>{{=item.name }} ({{=item.age }})</li> 
    {{ }); }} 
</script> 

也按钮

<button id="bindclick">Click</button> 

和JA代码,其中我使用淘汰赛:

ko.applyBindings({ 
    hdr: "People", 
    people: ko.observableArray([{name:"name1",age: 45},{name:"name2",age: 33}]) 
}); 

该怎么办,该模板的值可以改变用点击一个按钮,而不是“未捕获的错误:你不能多次申请绑定到相同的元素。” ?:

$("#bindclick").click(function() { 
    ko.applyBindings({ 
     hdr: "People2", 
     people: ko.observableArray([{name:"name1",age: 45}]) 
    }); 
}); 

感谢

+0

[在KnockoutJS中动态更改模板](http://www.knockmeout.net/2011/03/quick-tip-dynamically-changing.html) –

回答

2

您应该只需要使用一个模型对象调用一次applyBindings。

稍后在您的点击处理程序中,您只需更新模型。

例如:

var theModel = { 
    hdr: ko.observable('People'), 
    people: ko.observableArray([{name:"name1",age: 45},{name:"name2",age: 33}]) 
}; 

ko.applyBindings(theModel); 

$('#bindclick').click(function() { 
    theModel.hdr('People2'); 
    theModel.people([{name:"name1",age: 45}]); 
}); 

更新模型应该更新您先前绑定的内容。