2014-09-03 48 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