0

我正在测试过滤器内容以仅显示 X 个结果,我必须使用计数器来执行此操作,因为适配器如何返回数据。

http://jsfiddle.net/eAvET/

当你加载这个修改过的例子时,显示了0个数据,但是当你开始输入搜索来自,然后清除它时,结果是正确的。

所以这条线

if(this.get('searchTerm') === '')

或者

if(this.searchTerm === '') // Refered to the controller method

不工作,知道为什么我必须在 seach 输入中写入内容,然后清除它以使其工作吗?开始时应该只返回 2 个结果。

4

1 回答 1

2

我看了你的小提琴,你的问题是你没有在你的PeopleController. 我添加了content.@each,现在它可以工作了。

为什么以前没有工作? 这个依赖声明告诉 Ember 每次在这个数组中添加或删除一个对象时更新这个计算属性。我不确定为什么会发生这种情况,因为当内容数组被交换为不同的数组时,该属性应该已经起作用。我认为Ember 正在获取您的模型钩子的结果并将其一一添加到您的 ArrayController中。这可以解释这种行为。

App.PeopleController = Em.ArrayController.extend({
    searchTerm: '',

    filteredContent: function() {
        var people = this.get('content');
        var search = this.get('searchTerm').toLowerCase();
        if(this.searchTerm == '') {
            var counter = 0;
            return people.filter(function(person) {
                if(counter < 2) {
                    counter ++;
                    return person;
                }
            });


        } else {
            return people.filter(function(person) {
                return person.get('firstName').toLowerCase().indexOf(search) !== -1 ||
                       person.get('lastName').toLowerCase().indexOf(search) !== -1;
            });
        }
    }.property('content', 'searchTerm','content.@each')
});
于 2013-08-21T10:53:35.360 回答