Knockout.js 确定一个项目是否是observableArray中的第一个项目

Knockout.js 确定一个项目是否是observableArray中的第一个项目,knockout.js,Knockout.js,我有一个模板,它绑定到一个击倒的耳环上。我正在尝试获取仅在数组中的第一项上显示的内容。删除第一个项目时,成为第一个项目的下一个项目应显示此部分。它的工作原理应该类似于下面的代码。该键是isFirst函数 HTML 由于您处于的上下文中,因此可以利用“注意2:使用$index、$parent和其他上下文属性”下链接中详述的$index属性 你有两个不同的选择 如果绑定,则使用无容器的,仅呈现第一个元素的标记,类似于本文中的讨论 对于这种特殊情况,选项1是更合适的方法 编辑:将其保留在viewm

我有一个模板,它绑定到一个击倒的耳环上。我正在尝试获取仅在数组中的第一项上显示的内容。删除第一个项目时,成为第一个项目的下一个项目应显示此部分。它的工作原理应该类似于下面的代码。该键是isFirst函数

HTML


由于您处于的上下文中,因此可以利用“注意2:使用$index、$parent和其他上下文属性”下链接中详述的
$index
属性

你有两个不同的选择

  • 如果绑定,则使用无容器的
    ,仅呈现第一个元素的标记,类似于本文中的讨论

  • 对于这种特殊情况,选项1是更合适的方法


    编辑:将其保留在viewmodel中:

    我首先将
    isFirst
    移动到$root,然后更改绑定。因为,我们已经有了
    $index
    ,您可以将其传入

    <!-- ko if: $root.isFirst($index) -->
    
    或者,与您最初的方法类似:

    <!-- ko if: $root.isFirst($data) -->
    

    太好了,谢谢!你最初的反应比我想象的更简单、更整洁。但很高兴我问了,我从未想过将$Index()传递到函数中。
    <!-- ko if: $index()=== 0 -->
     <span>The first person is</span>
    <!-- /ko -->
    
    <span data-bind="visible: $index() == 0">The first person is </span>
    
    <!-- ko if: $root.isFirst($index) -->
    
     self.isFirst = function(index){
      return 0 === index();
    }
    
    <!-- ko if: $root.isFirst($data) -->
    
    self.isFirst = function(item){
      return 0 === self.people.indexOf(item);
    }