Knockout.js .... Observables的问题是什么?

时间:2013-07-12 02:06:44

标签: jquery knockout.js

以下是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问题。

2 个答案:

答案 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'
    });
};