使用Knockout进行条件"点击"绑定

Rob*_*ous 16 knockout.js

我将click事件绑定到列表中的每个列表项:

        <ul class="modal-subject-list" data-bind="foreach: filteredSubjects">
            <li data-bind="click: $parent.pickSubject, css: {alreadyAddedBackground: hasBeenAdded}">
                <!-- Lots of code here -->
            </li>
        </ul>
Run Code Online (Sandbox Code Playgroud)

click:如果'hasBeenAdded'解析为true,我想禁用绑定.我知道一些混乱的方法来处理它:

  1. 有两个列表项,一个用于if: hasBeenAdded,另一个用于if: !hasBeenAdded.这远非干旱
  2. 使用javascript处理此检查并单独保留视图 - 我不喜欢这样,因为正在为应该基本上禁用的列表项生成不必要的标记.

有没有办法注册"clickIf"绑定?

PW *_*Kad 41

做这个

    <ul class="modal-subject-list" data-bind="foreach: filteredSubjects">
        <li data-bind="click: hasBeenAdded ? null : $parent.pickSubject">
            <!-- Lots of code here -->
        </li>
    </ul>
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/7hcj6/

阅读 -

如果已添加filteredSubject,则不执行任何操作,否则添加到列表或其他任何内容.

  • 单击时不执行任何操作的按钮几乎不是用户友好的,更好的方法是使用启用/解除绑定 (7认同)
  • OP非常具体,因为他想有条件地处理点击绑定,无论他是否在生产环境中使用null是他的选择... (2认同)