可见绑定在淘汰赛 js 中不起作用

Posted

技术标签:

【中文标题】可见绑定在淘汰赛 js 中不起作用【英文标题】:Visible binding is not working in knockout js 【发布时间】:2014-10-28 19:44:36 【问题描述】:

在我的代码中,我在单击添加按钮时推送一个对象,该按钮显示一个输入字段和应用按钮。单击应用按钮后,我编写了一个函数,通过该函数显示我的文本并显示字段按钮。但我收到一个错误“显示未定义” 这是我的功能

self.apply = function () 
    self.show(false);
    self.showFields(true);
;

addterm 来了

self.addTerm = function () 
    var term = new Term("12");
    self.Terms.push(term);
    self.show(true);
    self.showFields(false);
;

这里是 JS Fiddle Link

【问题讨论】:

【参考方案1】:

当您使用以下方法迭代 Terms 时:

<tbody data-bind="foreach: Terms">

tbody 内的范围成为您正在迭代的当前Term。所以当你写的时候:

<input type="text" class="edit" data-bind="value: loanterm, visible: show"  />

Knockout 正在寻找显然不存在的Term.show。因此,您需要使用 $root 关键字将 Knockout 指向根 ViewModel:

<input type="text" class="edit" data-bind="value: loanterm, visible: $root.show"  />

(同样适用于您的 showFields 属性)

见Binding-Context

【讨论】:

【参考方案2】:

您需要添加父关键字。

<button class="button addNewButton" data-bind="click: $root.addTerm">Add a new Term for Loan</button>
<table class="termGrid">
<thead>
    <tr>
        <th class="headRow headColumn">
            Term
        </th>
        <th class="headRow tools">
        </th>
    </tr>
</thead>
<tbody data-bind="foreach: Terms">
    <tr class="row">
      <td class="tools">

            <input type="text" class="edit" data-bind="value: loanterm, visible: $parent.show"  />
            <strong class="read" data-bind="text: loanterm, visible: $parent.showFields" ></strong>
            <a class="button toolButton" href="#" data-bind="visible: $parent.showFields" >show Tiers</a> 
             <a class="button toolButton" href="#" data-bind="click: $root.apply,visible:$parent.show" >Apply</a> 

        </td>
    </tr>
</tbody>

fiddle demo

【讨论】:

以上是关于可见绑定在淘汰赛 js 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

淘汰可见绑定样式显示内联不起作用

淘汰赛数据绑定在内循环中不起作用

Select2 Js 下拉菜单在 durandal Js 中不起作用

CSS 绑定在 Knockout JS 中不起作用

淘汰赛foreach绑定不起作用

淘汰赛最小/最大验证不起作用