用函数列表敲除foreach
Knockout foreach with list of functions
在函数列表上使用foreach绑定时遇到问题。我希望内部上下文是函数本身,但相反,上下文绑定到调用函数的结果。这里有一个简单的例子来说明这一点:(JSFiddle)
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 -->
输出是:"string foo",但我希望它是"function function(){return"foo";}"
作为一种变通方法,我可以使用$parent.list[$index()]
,但这真的很难看,如果可能的话,我希望避免这种语法。
(为了在我的实际使用中进行解释,这些不是简单的函数,而是我附加了额外属性的函数,我想引用它们,但我不能引用它们,因为敲除正在调用它们)
编辑:
这里似乎有一个KO版本的问题。在3.0之前,这不是问题,上下文总是绑定到函数而不是值。在3.0上,使用$rawData
会给出函数,而不是那个值,但在3.2上,它不会,这就是我试图使用的。
我已经将上面的fiddle更新为使用3.2,这里为每个版本提供了一个fiddle,包括$rawData
(除了2.3中不存在$rawData)
击倒2.3小提琴:$rawData
不需要
淘汰赛3.0小提琴:$rawData
作品
淘汰赛3.2小提琴:$rawData
不起作用。
这可能是一个KO 3.2错误吗?
不,这是KO 3.0中的一个错误。
在<2.3这是一个缺失的功能。因为如果没有$rawData
,就无法使用包含observablez [ko.observable(1), ko.observable(2)]
的数组。
在3.0中引入了$rawData
,但它存在缺陷。已在3.1中修复https://github.com/knockout/knockout/pull/1206.
因此,这是daedalus28在上述链接问题中总结的正确行为:
如果
$rawData
是一个函数而不是一个可观测值,那么它应该是返回值。如果它是可观察的(或函数的结果是可观察到的),则应将其展开为$data
,而不是$rawData
-$rawData
应保留实际的可观察(函数的结果)
所以目前KO不支持您的用例。
因此,您必须在$parent.list[$index()]
上使用,或者不要直接将函数放入数组中。
将它们包裹到可观测
list: [
ko.observable(function() {
return "foo";
}),
ko.observable(function() {
return "bar";
}),
ko.observable(function() {
return "hodor";
})
]
演示JSFiddle。
或者把它们放在一些虚拟物体上:
list: [
{bar: function() {
return "foo";
}},
{bar: function() {
return "bar";
}},
{bar: function() {
return "hodor";
}}
]
你写道:
<span data-bind="text: bar"></span>
演示JSFiddle。
- 要求输入在数据列表中
- 从javascript创建一个列表
- 如何使用jQuery选择下拉列表的值
- 将输入字段中的文本提交到我的数据库,同时将其添加到我的列表中
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- Javascript按钮下拉列表
- 如何使用json将对象列表从java转换为javascript
- 区分JSON中的矩阵和列表列表
- Keystone.js嵌套承诺 -> foreach -> 列表查找范围问题
- KnockoutJS从可观察数组中删除项目.Item 是 ul 中的列表项,由 foreach 生成
- 用函数列表敲除foreach
- 在html表的foreach绑定中,是否有可能将数据绑定到一个带有knockout的select下拉列表?
- js foreach在未显示的项目列表上
- javascript/jquery中c:foreach列表的总大小
- 如何使用forEach删除列表中的元素?
- 在PHP编码器中使用javascript中的foreach获取列表
- 为什么jQuery Selectable插件不能处理foreach生成的列表?
- foreach绑定到字符串列表时,如何访问字符串
- Foreach数字列表(作为数组)javascript/jquery替代PHP
- 在foreach列表后运行脚本