1

这是我在 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>,但我收到此错误消息:

错误:无法解析绑定。消息:语法错误:元素列表后缺少];绑定值:随便:[people[0].name, 'blah blah blah']

(再一次,这里是这个 jsFiddle 的链接。)

这看起来很奇怪,好像它变得困惑并认为这[0]是另一个列表而不是people. 任何想法为什么会发生这种情况或如何解决问题?

我对 Knockout 不是很有经验,所以很可能我做错了可怕的事情。例如,我什至很难在网上找到人们创建自定义绑定的示例,这些绑定直接从模板中获取多个输入(出于某种原因,这是不应该做的事情吗?)。

4

2 回答 2

1

除了传递数组之外,不完全确定问题似乎会导致问题。我用命名参数替换,它可以工作:

http://jsfiddle.net/37Py6/

另请注意,我使用了

ko.bindingHandlers.text.update(...)

,以免做DOM操作是淘汰码。

于 2013-04-13T20:09:48.257 回答
1

如果你用一个函数包装它也可以工作:http: //jsfiddle.net/67TyP/7/

<p data-bind="whatever: function(){ return [people[0].name, 'blah blah blah']}() "></p>
于 2013-04-13T20:25:23.390 回答