2014-09-03 59 views
4

我正在使用knockout一点点,并且我被某些东西卡住了。我做了一个例子,你创建了名字,姓氏,然后创建一个ko.computed来创建fullName。这工作正常,但让我们说我有一个可观察的数组与很多包含名字和姓氏的对象。如何使用计算的函数来创建全名?如果我创造这样:如何在foreout中使用foreach中的计算方法knockout.js

function vm() { 
.... 


self.fullName = ko.computed(function() { 
    return self.names().firstName + "" + self.names().lastName; 
} 

,因为这是一个视图模型的方法,并在foreach内结合淘汰赛会寻找当地的方法我不能使用它(在这种情况下,self.names的方法())

也不能使用$ root.fullName,因为敲除将不会检索正确的值。

小提琴:http://jsfiddle.net/mtfv6q6a/

回答

3

您可以通过assiging一个变量,你的虚拟机某物调用它。像:

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

<h3 data-bind="text: appModel.fullName()"></h3> 

这个工作,但总是会返回undefinedundefined http://jsfiddle.net/mtfv6q6a/1/因为的firstName不是地名()

你更需要像一些简单函数的性质:

self.returnFullName = function(item) { 
    return item.firstName + " " + item.lastName; 
}; 

并称之为

<h3 data-bind='text: appModel.returnFullName($data); '></h3> 

http://jsfiddle.net/mtfv6q6a/2/

+0

请问作品,但在这种情况下,我可能只是做$ root.returnFullName($数据)。感谢 – 2014-09-03 14:49:25

+0

的理解,你不要调用计算函数,当包含observable发生变化时,计算函数被称为automaticaly,所以 – 2014-09-03 18:16:45

+0

谢谢你的jsfiddle - 用你的例子我能够让我的代码工作。顺便说一下,在循环中,如果您不想像第一步中那样为模型分配变量(“appModel”),可以调用$ parent.fullName()。 – Roger 2017-04-25 20:34:38