2014-10-09 48 views
0

在下面的Knockoutjs代码中,名字和姓氏都起作用。问题出现在显示全名。它没有得到“this.firstName”和“this.lastName”的值。我该如何解决这个问题。如何在JSON中使用Knockoutjs的数据绑定函数?

var AppViewModel = { 
    firstName:ko.observable("Bert"), 
    lastName:ko.observable("Bertington"), 
    fullName:ko.pureComputed(function(){ 
     return this.firstName()+ " "+this.lastName(); 
    }, this, {deferEvaluation : false}) 
}; 
<h1>Introduction</h1> 
<p>First name: <strong data-bind="text:firstName">todo</strong></p> 
<p>Last name: <strong data-bind="text:lastName">todo</strong></p> 

<p>First name: <input data-bind="value:firstName" /></p> 
<p>Last name: <input data-bind="value:lastName" /></p> 

<p>Full name: <strong data-bind="text:fullName"></strong></p> 
+0

使用console.dir(本)调试“本”,并检查是否计算被称为在所有 – 2014-10-09 15:13:18

+0

您可能需要更多地了解['this'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this)。 – shriek 2014-10-09 15:57:04

回答

1

我做了,因为我曾经使用淘汰赛

var AppViewModel = function (data){ 
    this.firstName=ko.observable("Bert"), 
    this.lastName=ko.observable("Bertington"), 
    this.fullName=ko.computed(function(){ 
     return this.firstName() + this.lastName() 
    }, this, {deferEvaluation : false}) 
} 

appModel = new AppViewModel(); 
ko.applyBindings(appModel); 

这里是工作提琴一些稍有变化:

http://jsfiddle.net/su3sfdff/

,如果你想要的计算为“现场”

调整valueUpdate属性是:

<p>First name: <input data-bind="value:firstName,valueUpdate:['afterkeydown', 'input']" /></p> 
<p>Last name: <input data-bind="value:lastName,valueUpdate:['afterkeydown', 'input']" /></p> 

http://jsfiddle.net/su3sfdff/1/

+0

谢谢你回答我的问题。但我想是否可以使用JSON来创建它,因为我已经使用jQuery函数来扩展对象,这个函数称为extend later。 – Yonathen 2014-10-12 09:53:04