1

这是jsFiddle

我的主要问题是使用可观察数组。我有一个联系人列表,我希望过滤器在您键入时过滤列表,但根据调试器,我从以下“通常”属性中一无所获:

self.contacts.length

甚至

contact.name

这些是可观察的数组和可观察的属性。

因此排序不起作用,因为它无法正确访问 left.name 或 right.name。但是,如果我将属性设置为“正常”且不可观察,它会起作用。
此外,实际的过滤器函数在任何地方都需要 .peek() 来让调试器返回实际值,然后在 .name.toLowerCase() 上继续失败。

似乎当我定义一个可观察对象时,我失去了它所谓的包装的所有行为。这是正常的还是我在我的环境中遇到了可怕的错误?


附言

SO says: "links to jsFiddle must be accompanied by code"

我说 SO 应该在开始要求这类事情之前更好地处理 js/html/css 问题。

4

2 回答 2

2

就像马特已经说过 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'
    });
};
于 2013-07-12T06:14:13.620 回答
2

可观察数组是一个函数,因此要访问它的长度,您需要:

myArray().length

myArray()将返回底层数组及其所有函数和属性。还请务必查看内容以获取有关可观察数组本身可用的函数的更多信息。

于 2013-07-12T02:50:40.673 回答