在knockout可排序示例中使用if子句

时间:2015-04-17 12:59:15

标签: knockout.js

以下代码工作正常..

<div class="student" data-bind="text: gender()+'-'+name()"></div>

但是,当我执行以下操作时,不会考虑if子句,并且所有项目都附加了[M] ..

<!-- ko if: gender()=="male" -->
            <div class="student" data-bind="text: '[M]'+name()"></div>
            <!-- /ko -->

Jsfiddle

真心感谢任何帮助。

由于

2 个答案:

答案 0 :(得分:4)

我认为docs中的这些信息是相关的

  

注意:可排序绑定假定子“模板”具有单个容器元素。您不能在模板的顶层使用无容器绑定(基于注释)绑定,因为jQuery可拖动/可排序功能需要一个元素来操作。

我怀疑这会达到预期的效果

<div class="seats" data-bind="sortable: { data: students, allowDrop: $root.isTableFull }">            
    <div class="student" data-bind="visible: gender() == 'male', text: '[M]'+name()"></div>
    <div class="student" data-bind="visible: gender() == 'female', text: '[F]'+name()"></div>
</div>

更新了小提琴:http://jsfiddle.net/UdXr4/771/

答案 1 :(得分:2)

我不确定为什么IF语句没有直接工作,但你可以通过删除IF语句并在元素上放置可见来直观地实现同样的事情。

http://jsfiddle.net/UdXr4/770/

<div class="student" data-bind="visible:gender() =='male', text: '[M]'+name()"></div>

在黑暗中拍摄但我认为你也会想要女性......这将是一个更好的方法来实现它..

http://jsfiddle.net/UdXr4/772/

<div class="student" data-bind="text: (gender() == 'male' ? '[M]':'[F]') + name()"></div>