Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery Knockout.js。。。。什么';我的问题是什么?_Jquery_Knockout.js - Fatal编程技术网

Jquery Knockout.js。。。。什么';我的问题是什么?

Jquery Knockout.js。。。。什么';我的问题是什么?,jquery,knockout.js,Jquery,Knockout.js,这是你的电话号码 我的主要问题是使用可观测阵列。我有一个联系人列表,我希望过滤器在您键入时过滤该列表,但根据调试器,我从以下“常用”属性中得不到任何信息: self.contacts.length 甚至 contact.name 这些是可观测阵列和可观测属性 因此排序不起作用,因为它无法正确访问left.name或right.name。但是,如果我将属性设置为“正常”且不可观察,则它会起作用。 此外,实际的筛选器函数需要.peek()的无处不在,以便调试器返回实际值,然后继续在.name.t

这是你的电话号码

我的主要问题是使用可观测阵列。我有一个联系人列表,我希望过滤器在您键入时过滤该列表,但根据调试器,我从以下“常用”属性中得不到任何信息:

self.contacts.length
甚至

contact.name
这些是可观测阵列和可观测属性

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

似乎当我定义一个可观察的东西时,我就失去了它所谓的包装的所有行为。这是正常的还是我的环境出了严重的问题


附言


我认为,在js/html/css开始要求此类问题之前,它应该更好地处理js/html/css问题。

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

myArray().length

myArray()
将返回底层数组及其所有函数和属性。另外,请务必查看可观察数组本身可用函数的更多信息。

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

myArray().length

myArray()
将返回底层数组及其所有函数和属性。另外,请务必查看observable array本身可用函数的更多信息。

就像Matt已经说过的observable array是一个函数,您需要调用该函数来访问属性。。。例如:

<span data-bind="text: contact().name"></span>
如果需要数组的长度

self.contact().length
self.contactFilter = function() {
    return ko.utils.arrayFilter(self.contact(), function(item) {
        return ko.unwrap(item.name) == 'John'
    });
};
。。。因为这在模板中使用时看起来很难看,所以我通常创建一个计算函数

self.hasContact = ko.computed(function() {
    return self.contact().length;
});
。。。如果要筛选/搜索数组

self.contact().length
self.contactFilter = function() {
    return ko.utils.arrayFilter(self.contact(), function(item) {
        return ko.unwrap(item.name) == 'John'
    });
};

就像Matt已经说过的observableArray是一个函数,您需要调用该函数来访问属性。。。例如:

<span data-bind="text: contact().name"></span>
如果需要数组的长度

self.contact().length
self.contactFilter = function() {
    return ko.utils.arrayFilter(self.contact(), function(item) {
        return ko.unwrap(item.name) == 'John'
    });
};
。。。因为这在模板中使用时看起来很难看,所以我通常创建一个计算函数

self.hasContact = ko.computed(function() {
    return self.contact().length;
});
。。。如果要筛选/搜索数组

self.contact().length
self.contactFilter = function() {
    return ko.utils.arrayFilter(self.contact(), function(item) {
        return ko.unwrap(item.name) == 'John'
    });
};

如果您不发布任何代码,您希望人们如何回答有关您代码的问题?这样如何才能更好地处理JS问题?似乎是一个很好的元讨论。。。不过,讨论这个问题本身可能不太好。我确实发布了代码,但JSFIDLE为此类问题提供了更好的形式(小的完整示例)。因此,我们可以尝试提供类似的功能来处理小而完整的示例,或者至少尝试解决拥有多个文件的问题。元讨论已经开始,图书馆员赢了。他们总是赢。@Quibblesome:在jsfiddle上发布完整的工作示例,然后只发布您认为可能存在问题的一小部分,这是没有问题的。我认为SO提供在SO内部复制JSFIDLE的功能是没有意义的,但正如Andrew所建议的,这将成为一个元讨论。如果你不发布任何代码,你希望人们如何回答关于你的代码的问题?这样如何才能更好地处理JS问题?似乎是一个很好的元讨论。。。不过,讨论这个问题本身可能不太好。我确实发布了代码,但JSFIDLE为此类问题提供了更好的形式(小的完整示例)。因此,我们可以尝试提供类似的功能来处理小而完整的示例,或者至少尝试解决拥有多个文件的问题。元讨论已经开始,图书馆员赢了。他们总是赢。@Quibblesome:在jsfiddle上发布完整的工作示例,然后只发布您认为可能存在问题的一小部分,这是没有问题的。我认为SO提供在SO自身中复制JSFIDLE的功能是没有意义的,但正如Andrew所建议的,这将成为一个元讨论。