如何在knockout.js中使用foreach中的计算方法

时间:2014-09-03 13:57:29

标签: javascript knockout.js

我正在玩淘汰赛一点点,但我还是坚持不懈。我做了一个例子,你创建了第一个名字,姓氏,然后创建一个ko.computed来创建fullName。这工作正常,但是我们说我有一个可观察的数组,其中包含许多包含名字和姓氏的对象。如何使用计算函数创建全名?如果我创建类似的东西:

function vm() {
....


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

我无法使用它,因为这是一个viewmodel方法,并且foreach绑定敲除内部会查找本地方法(在本例中为self.names()方法)

也不能使用$ root.fullName因为然后knockout将无法检索正确的值。

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

1 个答案:

答案 0 :(得分:3)

你可以通过将变量分配给你的vm来调用它。喜欢:

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

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

这样可行,但总会返回undefinedundefined http://jsfiddle.net/mtfv6q6a/1/,因为firstName不是names()的属性

你需要一些简单的功能,如:

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

并将其称为

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

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