我在使用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