可见绑定在敲除js中不起作用

时间:2014-09-04 06:54:17

标签: javascript knockout.js

在我的代码中,我在点击Add按钮时按下一个对象,该按钮显示一个输入字段和一个应用按钮。点击申请按钮我写了一个功能,通过它我显示我的文本和显示字段按钮。但我得到一个错误“显示未定义”  这是我的功能

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

您需要添加父关键字。

<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