0

我有一个Helper,它接收一个元素数组并根据第一个数组返回一些其他数组。

{{#each (sorted-strings myStrings) as |string|}}
  {{string}}
{{/each}}

Helper的实现可以是这样的:

// app/helpers/sorted-strings.js
import Ember from 'ember';

export function sortedStrings(params/*, hash*/) {
  return params[0].sort();
}

export default Ember.Helper.helper(sortedStrings);

Helper工作正常,但如果原始myStringArray 发生更改,则更改不会影响已呈现的列表。

如何结合ComputedProperty的行为和Helper的结果?

4

3 回答 3

3

使用 notifyPropertyChange()它将通知助手数组已更改。我认为助手有对数组的引用并且不知道它的内容或长度已经改变

像这样

actions: {
    add() {
     this.get('myStrings').pushObject('testing');
     this.notifyPropertyChange('myStrings');
    }
  }

我已经更新了 Twiddle - 这是新链接https://ember-twiddle.com/31dfcb7b208eb1348f34d90c98f50bbb?openFiles=controllers.application.js%2C

于 2016-06-14T09:50:28.323 回答
1

经过一番挣扎后,我才发现正确的解决方案是声明一个Component而不是一个Helper。通过这种方式,我可以显式声明一个观察myStrings数组中变化的计算属性:

// app/components/sorted-strings.js
export default Ember.Component.extend({
  myStrings: null,
  sortedMyStrings: Ember.computed('myStrings', function() {
    return this.get('myStrings').sort();
  });
});

// app/templates/components/sorted-strings.hbs
{{#each sortedMyStrings as |string|}}
  {{string}}
{{/each}}

// template
{{sorted-strings myStrings=myStrings}}
于 2016-06-14T14:08:07.190 回答
-1

将计算属性传递给助手应该可以正常工作。看看这个旋转

也许您的计算属性没有正确更新。

于 2016-06-14T09:23:24.127 回答