【问题标题】:getting first element of array in knockout js在淘汰赛js中获取数组的第一个元素
【发布时间】:2015-12-08 18:05:04
【问题描述】:

我在 knockoutjs 中填充对象数组

我想避免使用foreach,所以我尝试data-bind第一项

如果我使用下面的代码,它工作正常

<div class="loader" data-bind="foreach: Items" >
        <span data-bind="text: name"></span>
    </div>

但是如果我使用下面的那个,它就不起作用了

<div class="loader">
        <span data-bind="text: Items[0].name"></span>
    </div>

第二种方式的错误是什么?

我得到的错误是

Uncaught TypeError: Unable to process binding "text: function (){return Items[0].name }" 消息:无法读取属性“名称”的 未定义

【问题讨论】:

    标签: javascript knockout.js


    【解决方案1】:

    你需要unwrap observableArray Items 使用() 符号来读取它的内容。

    这样试试

    <div class="loader">
         <span data-bind="text: Items()[0].name"></span>
    </div>
    

    【讨论】:

    • 当我使用第一个时,它每次都有效,但在这个 Items()[0] 中,有时会导致以下错误Uncaught TypeError: Unable to process binding "text: function (){return Items()[0].Name}" Message: Cannot read property 'Name' of undefined
    • 你确定@vignesh items 总是一个observableArray 还是你直接绑定json 来查看?另外是Name在数组下定义的。
    • 是的。它是 observableArray 和 .Name 在其中定义当我使用第一种方式使用 ng-repeat
    【解决方案2】:
    text: Items()[0].name
    

    检查一下。

    【讨论】:

      【解决方案3】:

      使用Items()[0].nameko.unwrap(Items)[0] 我会推荐第二个,因为它更安全,因为即使 Items 不是可观察数组,它也会返回数组,因此有助于避免异常。

      【讨论】:

      • 这样?? &lt;span data-bind="text: ko.unwrap(Items)[0].name"&gt;
      • 是的@vignesh!如果 items 是不可观察的,即普通的 java-script 数组。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-31
      • 2013-06-22
      • 1970-01-01
      • 2014-11-12
      • 1970-01-01
      • 1970-01-01
      • 2017-01-14
      相关资源
      最近更新 更多