Here is an example of my problem on jsFiddle.
我想创建一个带有两个输入的自定义绑定。这可以通过将值数组传递给绑定来完成。例如,这种绑定:
ko.bindingHandlers.whatever = {
update: function (element, valueAccessor) {
var args = valueAccessor();
element.innerHTML = args[0] + " " + args[1];
}
};
将获取两个输入并将它们连接在一起。那么<p data-bind="whatever: ['First', 'Second']"></p>
之类的内容将显示为<p>First Second</p>
。
这也适用于变量。因此,如果我在视图模型中有一些数据:
var vm = {
category: "Category",
people: [
{name: "Bob"},
{name: "Ann"}
]
};
ko.applyBindings(vm);
我可以做类似的事情:
<p data-bind="whatever: [category, 'blah blah blah']"></p>
,它将显示:
<p>Category blah blah blah</p>
当我想将嵌套变量传递给我的绑定时,我的问题出现了。像这样:
<p data-bind="whatever: [people[0].name, 'blah blah blah']"></p>
我希望它显示<p>Bob blah blah blah</p>
,但我收到此错误消息:
错误:无法解析绑定。消息:元素列表后面的SyntaxError:missing];绑定价值:无论如何:[people [0] .name,'blah blah blah']
(再次here's a link to this jsFiddle。)
这看起来很奇怪,好像它变得混乱,并认为[0]
是另一个列表而不是people
上的索引。任何想法为什么会发生这种情况或如何解决问题?
我对Knockout不是很有经验,所以很可能我做的事情非常糟糕。例如,我很难在网上找到人们创建自定义绑定的示例,这些绑定直接从模板中获取多个输入(这是因为某种原因不应该做的事情吗?)。
答案 0 :(得分:1)
除了传递数组之外,不完全确定问题似乎导致问题。我用命名参数代替了它,它起作用了:
另请注意,我使用了
ko.bindingHandlers.text.update(...)
,以便不做DOM操作是淘汰代码。
答案 1 :(得分:1)
如果你用一个函数包装它也可以工作: http://jsfiddle.net/67TyP/7/
<p data-bind="whatever: function(){ return [people[0].name, 'blah blah blah']}() "></p>