Javascript 具有多个输入的自定义敲除绑定,其中一个输入包含索引数组

Javascript 具有多个输入的自定义敲除绑定,其中一个输入包含索引数组,javascript,knockout.js,Javascript,Knockout.js,我想创建一个接受两个输入的自定义绑定。这可以通过向绑定传递一个值数组来完成。例如,此绑定: ko.bindingHandlers.whatever = { update: function (element, valueAccessor) { var args = valueAccessor(); element.innerHTML = args[0] + " " + args[1]; } }; 将获取两个输入,并在它们之间用空格连接。因此,类似

我想创建一个接受两个输入的自定义绑定。这可以通过向绑定传递一个值数组来完成。例如,此绑定:

ko.bindingHandlers.whatever = {
    update: function (element, valueAccessor) {
        var args = valueAccessor();
        element.innerHTML = args[0] + " " + args[1];
    }
};
将获取两个输入,并在它们之间用空格连接。因此,类似于

First Second

这也适用于变量。因此,如果视图模型中有一些数据:

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>

我想让它显示Bob blah blah blah

,但我得到了以下错误消息:

错误:无法分析绑定。消息:SyntaxError:缺少]在元素列表之后;绑定值:随便:[人[0]。名称,'blah blah blah']

(再一次,)

这似乎很奇怪,好像它开始感到困惑,认为
[0]
是另一个列表,而不是
人的索引。你知道为什么会发生这种情况,或者如何解决这个问题吗


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

除了传递数组之外,对问题没有确切的把握似乎是导致问题的原因。我将其替换为命名参数,它可以工作:

注:我还使用了

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

,以便不进行DOM操作,这是一种淘汰代码。

如果用函数将其包装起来,也可以使用:


这是KO绑定解析的一个缺陷/限制。这里有相同或非常相似的问题。在自定义绑定中将数组用作参数没有问题。问题是您试图在绑定表达式中构建参数数组。如果您有任何复杂的逻辑,如
people[0]。name
,则应在viewmodel中执行,而不是在绑定本身中执行:
<p data-bind="whatever: function(){ return [people[0].name, 'blah blah blah']}() "></p>