首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Knockout进行条件'click‘绑定

使用Knockout进行条件'click‘绑定
EN

Stack Overflow用户
提问于 2013-09-24 06:55:54
回答 2查看 15K关注 0票数 21

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

代码语言:javascript
复制
        <ul class="modal-subject-list" data-bind="foreach: filteredSubjects">
            <li data-bind="click: $parent.pickSubject, css: {alreadyAddedBackground: hasBeenAdded}">
                <!-- Lots of code here -->
            </li>
        </ul>

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

  1. 有两个列表项,一个用于if: hasBeenAdded,另一个用于if: !hasBeenAdded。这远不是干的
  2. 用javascript处理这个检查,不去管视图--我不喜欢这样,因为会为本质上应该禁用的列表项生成不必要的标记。

有没有注册"clickIf“绑定的方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-24 07:01:57

执行此操作

代码语言:javascript
复制
    <ul class="modal-subject-list" data-bind="foreach: filteredSubjects">
        <li data-bind="click: hasBeenAdded ? null : $parent.pickSubject">
            <!-- Lots of code here -->
        </li>
    </ul>

http://jsfiddle.net/7hcj6/

阅读-

如果已经添加了filteredSubject,则不执行任何操作,否则添加到列表中或其他任何操作。

票数 46
EN

Stack Overflow用户

发布于 2018-09-25 09:17:23

只是想扩展@PW Kad的答案,以防它能帮助其他人。

我发现我可以对knockout事件节点应用一个条件,这样就可以绑定所有处理程序或不绑定任何处理程序。在我的例子中,我只需要将事件绑定到不是只读的输入。所以,如果你需要做类似的事情,这是可行的。祝你编码愉快。

事件:$data.SomeProperty()?空:{多个事件处理程序}

示例代码:

代码语言:javascript
复制
<input type="number"
       data-bind="value: $data.Value,
                  css: $data.Css,
                  attr: {
                      title: $data.Title,
                      min: $data.Min,
                      max: $data.Max,
                      readonly: $data.ReadOnly
                  },
                  event: $data.ReadOnly() ? null : {  // <----- HERE
                      focus: $root.onFocus,
                      blur: $root.onBlur,
                      input: $root.onInput,
                      keypress: $root.onKeypress
                   }" />
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18970244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档