我在使用foreach綁定函數列表時遇到了問題。我希望內部上下文成爲函數本身,但相反,上下文被綁定到調用函數的結果。下面是說明了一個簡單的例子:(JSFiddle)Knockout foreach與函數列表
JS:
ko.applyBindings({
list: [
function() {
return "hodor";
}
]
});
HTML:
<!-- ko foreach: list -->
<span data-bind="text: typeof $data"></span>
<span data-bind="text: $data"></span>
<br />
<!-- /ko -->
輸出是: 「字符串foo」 的,但我想它是「功能函數(){return「foo」;}「
作爲解決方法,我可以做$parent.list[$index()]
,但這真的很難看,如果可能,我想避免使用該語法。
(對於我的實際使用說明,這些都不是我所附加的額外屬性,我要引用簡單的功能,但功能,但我不能引用他們,因爲淘汰賽被調用它們)
編輯:
看來,這裏有一個KO版本的問題。在3.0之前,這不是問題,上下文總是與函數而不是價值綁定。在3.0上,使用$rawData
會給出函數,而不是該值,但在3.2,它不會,這是我正在嘗試使用的。
我已經更新上面的小提琴使用3.2,而這裏的每個版本提琴,包括$rawData
(除2.3其中$ RAWDATA不存在)
Knockout 2.3 fiddle:$rawData
不需要
Knockout 3.0 fiddle:$rawData
作品
Knockout 3.2 fiddle:$rawData
不起作用。
難道這是一個KO 3.2的錯誤?
我敢肯定,它有些混淆了它如何假設一個函數將成爲一個可觀察對象,因此調用它。一個可能的解決辦法可能是將你的函數封裝在另一個函數中,像這樣:http://jsfiddle.net/dq4ec706/3/但是看起來確實很愚蠢。它使'$ data'在3.0和3.2都可以工作,但不能在2.3。 – 2014-10-29 18:12:05
是的,我寧願使用'$ parent.list [$ index()]'解決方法,它總是起作用,而不是再次包裝我的函數。 – Retsam 2014-10-29 18:16:22