【发布时间】:2020-05-03 07:41:08
【问题描述】:
错误:
“未捕获的错误:无法处理绑定“foreach:函数(){返回电话}” 消息:看起来像可观察对象的无效对象;可能来自另一个 Knockout 实例”
html:
<h3>Contacts</h3>
<div >
<table >
<thead>
<tr>
<th>first name</th>
<th>last name</th>
<th>number</th>
</tr>
</thead>
<tbody data-bind="foreach: contacts">
<tr>
<td>
<input data-bind="value :firstName" /><br />
<a href="#" data-bind="value : $root.deleteContact">delete contact</a>
</td>
<td>
<input data-bind="value : lastName" />
</td>
<td>
<table>
<tbody data-bind="foreach : phones">
<tr>
<td><select data-bind="options : contactType , value : contactTypeValue"></select></td>
<td><input data-bind="value : number" /></td>
<td><a href="#" data-bind="click : $root.deleteNumber">delete number</a></td>
</tr>
</tbody>
</table>
<a href="#" data-bind="click :$root.addNumber">add number</a>
</td>
</tr>
</tbody>
</table>
<br /><br />
<button data-bind="click : addContact"> add contact</button>
</div>
javascript:
var contactsModel = function ()
{
var self = this;
this.contacts = ko.observableArray([]);
this.addContact = function ()
{
this.contacts.push({
firstName: "",
lastName: "",
phones: ko.observableArray()
});
};
this.deleteContact = function (contact)
{
this.contacts.remove(contact);
};
this.addNumber = function (contact)
{
contact.phones.push({
type: "",
number: ""
});
};
this.deleteNumber= function (phone)
{
$.each(this.contacts(), function () { this.phones.remove(phone) })
};
}
ko.applyBindings(new contactsModel());
我是 Knockout JS 的新手,所以有人可以解决上述错误。
【问题讨论】:
-
将此行
<a href="#" data-bind="value : $root.deleteContact">delete contact</a>更改为<a href="#" data-bind="click: $root.deleteContact">delete contact</a> -
@Nerdroid 我已将值绑定更改为单击元素上的绑定,但它没有解决错误。
-
我忘了说当我点击第一行self.contacts.push上的addContact时会产生这个错误。如果我第二次单击它会给出错误您不能多次将绑定应用于同一个元素如果我第三次单击它会给出错误无法读取未定义的属性“长度” .
标签: javascript jquery data-binding foreach knockout.js