我想创建一个需要两个输入的自定义绑定。这可以通过将值数组传递给绑定来完成。例如,这个绑定:
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>
,但我收到此错误消息:
错误:无法解析绑定。消息:语法错误:元素列表后缺少];绑定值:随便:[people[0].name, 'blah blah blah']
(再一次,这里是这个 jsFiddle 的链接。)
这看起来很奇怪,好像它变得困惑并认为这[0]
是另一个列表而不是people
. 任何想法为什么会发生这种情况或如何解决问题?
我对 Knockout 不是很有经验,所以很可能我做错了可怕的事情。例如,我什至很难在网上找到人们创建自定义绑定的示例,这些绑定直接从模板中获取多个输入(出于某种原因,这是不应该做的事情吗?)。