计算属性不会观察数组中对象的变化

时间:2017-03-24 13:13:30

标签: javascript ember.js

当我更改语言时,我的组件不会观察我的对象数组中的更改。它仅在更改路线后才有效,但它应该立即更改所有内容,而无需重新加载页面。

组件代码:

  columnsToEdit: Ember.computed('i18n.locale', function() {
    let i18n = this.get('i18n');
    return Ember.A([
      {
        "propertyName": "name",
        "title": i18n.t('Name')
      },
      {
        "propertyName": "phone",
        "title": i18n.t('Name'),        
      },
    ]);
  }),

  columns: Ember.computed.map('columnsToEdit.[]', function(column){
    return column;
  }),

我认为,它应该有效。 " ColumnsToEdit"在" columsToEdit"中查找来自i18n.locale的更改。下一个"列"查找" columnsToEdit"中的更改。当我打电话给" console.log" in" columns"它会返回预期的结果,但在我看来,点击" language-switch"后没有任何反应。那么为什么我的组件没有改变"标题"在视野中?任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

显示更多代码。 Your code is working fine!

但是,您需要了解您的媒体资源columns将始终与columnsToEdit完全相同。我不确定您想要做什么,但目前您没有在columns做任何事情。

答案 1 :(得分:0)

你可以试试这个:

currentLocale: Ember.computed.readOnly('i18n.locale'),
columnsToEdit: Ember.computed('currentLocale', function() {
    let i18n = this.get('i18n');
    return Ember.A([
      {
        "propertyName": "name",
        "title": i18n.t('Name')
      },
      {
        "propertyName": "phone",
        "title": i18n.t('Name'),        
      },
    ]);
  }),

  columns: Ember.computed.map('columnsToEdit.[]', function(column){
    return column;
  }),