我正在测试过滤器内容仅显示X个结果,我必须使用计数器,因为适配器如何返回数据。
当您加载此修改示例时,显示0数据,但当您开始在搜索中键入,然后清除它时,结果是正确的。
所以这一行
if(this.get('searchTerm') === '')
或
if(this.searchTerm === '') // Refered to the controller method
不工作,知道为什么我必须在搜索输入中写入内容,然后清除它以使其工作?只应在开始时返回2个结果。
答案 0 :(得分: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')
});