【问题标题】:Knockout is not evaluating an expression when using $index in a binding在绑定中使用 $index 时,Knockout 未评估表达式
【发布时间】:2012-07-03 09:05:32
【问题描述】:

为什么,当我尝试使用 knockout.js 通过 $index 绑定一些文本时,我得到的是函数的代码而不是数字?

<tbody  data-bind="foreach: MyList">
  <tr>
    <td><span data-bind="text: $index + 1"></span></td>
  </tr>
</tbody>

我得到的不是 1、2、3 等,而是:

您可以通过上图中的最后一个字符看到,我的零索引被添加到 1。如果我从绑定中删除“+ 1”,我会得到 0、1、2 而不是函数.

我如何告诉 knockout 来评估表达式?我在提交表单时遇到了同样的问题。我的字符串字段是作为函数而不是值提交的。

【问题讨论】:

    标签: knockout.js knockout-2.0


    【解决方案1】:

    $index 是一个 observable,它是一个函数。试试&lt;span data-bind="text: $index() + 1"&gt;&lt;/span&gt;

    【讨论】:

    【解决方案2】:

    如果你使用

    <span data-bind="text: $index() + 1"></span> 
    

    例如,您的索引值为 2,您的跨度文本将为:21 而不是 3。

    您应该在 viewModel 中定义一个函数,如下所示:

    self.itemNumber = function(index) {
        return index + 1;
    }
    

    然后在你的范围内你应该这样做:

    <span data-bind="text: $root.itemNumber($index())"></span>
    

    我希望这会有所帮助:)

    【讨论】:

    • +1 表示如果索引为 2,那么通过使用公认的答案技术,您将得到 21、23 左右而不是 3、4 ecc。我不明白接受答案是如何被接受的,这是错误的(至少在淘汰赛 2.2.1 中)。
    • 这是一个 jsFiddle...它似乎适用于两种方法:S jsfiddle.net/BAEsx/24
    猜你喜欢
    • 2018-10-19
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多