以下是jsFiddle
我的主要问题是使用可观察数组。我有一个联系人列表,我希望过滤器在您键入时过滤列表,但根据调试器,我通常"通常"属性:
self.contacts.length
甚至
contact.name
这些是可观察数组和可观察属性。
因此无法正确访问left.name或right.name,因此排序无效。但是,如果我将该物业设为“正常”并且#34;而不是可观察的 此外,实际的过滤器函数需要.peek()随处可供调试器返回实际值,然后在.name.toLowerCase()上继续失败。
似乎当我定义一个observable时,我失去了所谓的包装的所有行为。这是正常的还是我的环境中出现了可怕的错误?
P.S
SO says: "links to jsFiddle must be accompanied by code"
我说在开始要求这些事情之前,我应该更好地处理js / html / css问题。
答案 0 :(得分:2)
可观察数组是一个函数,因此要访问它需要的长度:
myArray().length
myArray()
将返回包含其所有函数和属性的基础数组。另外,请务必查看this以获取有关可观察数组本身可用函数的更多信息。
答案 1 :(得分:2)
就像Matt已经说过observableArray是一个函数,你需要调用函数来访问属性......例如:
<span data-bind="text: contact().name"></span>
如果要访问某个数组元素,可以使用...
self.contact()[0].name
如果你想要数组的长度......
self.contact().length
...因为在模板中使用时看起来很丑,我通常会创建一个计算函数...
self.hasContact = ko.computed(function() {
return self.contact().length;
});
...如果你想过滤/搜索数组......
self.contactFilter = function() {
return ko.utils.arrayFilter(self.contact(), function(item) {
return ko.unwrap(item.name) == 'John'
});
};