为什么'阵列'被传递给过滤函数?

时间:2015-10-08 23:03:51

标签: ember.js

JSBin Example

在以下代码中,' 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;将会更新变化?

1 个答案:

答案 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')));
})