在我的代码中,我在点击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
答案 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
财产)
答案 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>