2014-09-01 75 views
0

为什么下面的代码不能按预期工作?当我只调用一个ko.applyBindings方法时,它可以工作。 我们可以在一个页面中调用多个ko.applyBindings方法吗?我们可以在一个页面中调用多个ko.applyBindings方法吗?

<body> 
    <form id="form1" runat="server"> 
    <div> 
    <p>First name: <input data-bind="value: firstName" /></p> 
<p>Last name: <input data-bind="value: lastName" /></p> 
<h2>Hello, <span data-bind="text: fullName"> </span>!</h2> 
The name is <span data-bind="text: personName"></span> 
    </div> 
    </form> 
</body> 
<script type="text/javascript"> 
    var myViewModel = { 
     personName: 'Bob', 
     personAge: 123 
    }; 

var ViewModel=function(first, last) 
{ 
this.firstName=ko.observable(first); 
this.lastName=ko.observable(last); 
this.fullName=ko.pureComputed(function() 
{ 
    return this.firstName() + " " + this.lastName(); 
    }, this); 
}; 
ko.applyBindings(myViewModel); 
ko.applyBindings(new ViewModel("Hello", "World")); 
</script> 

回答

2

是的,你可以。但是你需要调用ko.applyBindings和你想要绑定的元素。下面是从您发布的代码示例借款:

HTML:

<div id="model1"> 
    <p>First name: <input type="text" data-bind="value: firstName" /></p> 
    <p>Last name: <input type="text" data-bind="value: lastName" /></p> 
    <h2>Hello, <span data-bind="text: fullName"> </span>!</h2> </div> 

<div id="model2"> 
    The name is <span data-bind="text: personName"></span>, 
    age is <span data-bind="text: personAge"></span> 
</div> 

的JavaScript:

var myViewModel = { 
    personName: 'Bob', 
    personAge: 123 
}; 

var ViewModel = function(first, last) { 
    this.firstName=ko.observable(first); 
    this.lastName=ko.observable(last); 
    this.fullName=ko.computed(function() { 
     return this.firstName() + " " + this.lastName(); 
    }, this); 
}; 

ko.applyBindings(myViewModel, document.getElementById('model2')); 
ko.applyBindings(new ViewModel("Hello", "World"), document.getElementById('model1')); 

注意,我改变了你的ko.pureComputedko.computed,因为在没有pureComputed我正在使用的knockout 3运行时。你使用扩展名吗?

JSFiddle:http://jsfiddle.net/krpqzwqd/

+1

'ko.pureComputed'是knockout 3.2的一部分。 – 2014-09-01 20:15:18

+0

啊,谢谢你,@MichaelBest。 – Paul 2014-09-01 23:41:53

相关问题