我的淘汰赛数据绑定产生未定义的控制台错误

时间:2019-05-05 19:07:52

标签: javascript knockout.js

我正在使用Knockout过滤两个下拉菜单,但我不知道为什么我会看到此控制台错误。

  

未捕获的TypeError:无法处理绑定“值:function(){return $ root.filter}”   消息:无法读取未定义的属性“长度”

问题与返回值有关,它可以正确过滤数据;但是,控制台错误不断出现,我尝试更改以下内容:

  • $root更改为$data
  • filter.Value更改为filter.ID()
  • 去掉括号,只返回ID,到目前为止没有任何作用?

JS /淘汰赛:

    var self = this;
    self.filters = ko.observableArray(self.Model.Teams());
    self.filter = ko.observable('');
    self.items = ko.observableArray(self.Model.Users());
    self.filteredItems = ko.computed(function () {
        var filter = self.filter();
        if (!filter || filter == "All") {
            return self.items();
        } else {
            return ko.utils.arrayFilter(self.items(), function (i) {
                return i.ID() == filter.Value();
            });
        }
    });

此选择下拉列表:

<div>
        <select class="filter-dropdown-small" data-bind="options: $root.filters, value: $root.filter, optionsText: 'Text', optionsCaption: 'All'"></select>
</div>

过滤这一个:

<div>
       ```<select class="filter-dropdown-small" data-bind="options: $root.filteredItems, optionsText: 'Text', optionsCaption: 'All'"></select>```
</div>

要过滤的数据,没有控制台错误。

1 个答案:

答案 0 :(得分:0)

由于$ root.filter在注入此HTML的另一个部分中使用,这是导致控制台错误的冲突,重命名了JS的filter部分,因此数据绑定在第一段html上,这解决了控制台错误,因此是问题。