在以下代码中,' array'只是一个整数数组,'项目'是一个对象列表,' coprop'是'项目的计算过滤器使用'数组' (可能会改变)决定'项目的哪些元素。属于' coprop'。
期望的结果只是'项目'有价值的'在'阵列'。
当' array'的元素时,实际结果是javascript错误。是(由于某种原因)除了项目'的元素之外还传递给过滤功能。这触发了一个' typeerror:i.get不是函数'消息。
array: [ 4, 5, 6 ],
items: function() {
return this.get('store').peekAll('item');
}.property(),
coprop: Ember.computed.filter('items', function(i,idx,ary) {
console.log('i = ' + i);
return this.get('array').isAny(i.get('value'));
}).property('items','array')
请注意 这是演示此问题的简化示例。过滤功能比此处所示更复杂,但这确实很清楚地显示了问题。
实际输出
"i = <App.Thing:ember409:1>"
"i = <App.Thing:ember410:2>"
"i = <App.Thing:ember411:3>"
"i = <App.Thing:ember412:4>"
"i = 4"
"error"
"TypeError: i.get is not a function
问题
为什么&#39;阵列&#39;被传递给过滤器函数作为要过滤的元素?
我如何确保&#39; coprop&#39;如果&#39;数组&#39;将会更新变化?
答案 0 :(得分:2)
因为它上面有property
后缀。也许你可以像这样过滤它:
coprop: Ember.computed('array.[]', 'items.[]', function(){
let arr = this.get('array');
return this.get('items').filter(i => arr.contains(i.get('value')));
})