Javascript 将本机数组/对象转换为Ember.array/Ember.object的最佳实践

Javascript 将本机数组/对象转换为Ember.array/Ember.object的最佳实践,javascript,arrays,object,ember.js,Javascript,Arrays,Object,Ember.js,我有一个余烬组件,它需要一个参数作为对象数组。 默认情况下,此参数将是包含本机对象的本机数组。 我想将此数组转换为包含余烬对象的余烬数组 我在想类似的事情,但这会创建一个无限循环,每次都会触发观察者: export default Ember.Component.extend({ content: null, contentDidChange: function () { var content = Ember.A(); this.get('cont

我有一个余烬组件,它需要一个参数作为对象数组。 默认情况下,此参数将是包含本机对象的本机数组。 我想将此数组转换为包含余烬对象的余烬数组

我在想类似的事情,但这会创建一个无限循环,每次都会触发观察者:

export default Ember.Component.extend({
   content: null,

   contentDidChange: function () {
        var content = Ember.A();
        this.get('content').forEach(function (item) {
            content.addObject((item.constructor.toString() !== 'Ember.Object') ? Ember.Object.create(item) : item);
        });
        this.set('content', content);
    }.observes('content'),
});
这样做的最佳做法是什么


谢谢

当组件首次启动时,您可以修改初始参数,如下所示:

App.ArrContentComponent = Ember.Component.extend({
  content: null, 

  modifyContent: function(){
    var content = this.get('content').map(function(item){
      return Ember.Object.create({ name: item });
    });

    this.set('content', content);
  }.on('didInsertElement')
});

工作示例

如果您之所以需要组件中的对象是因为您正在执行
此.get(..
操作,那么您可以使用
Ember.get(..
来代替

如果不是这样,那么我建议将组件绑定到转换的属性,而不是原始的
内容

transformedContent: null,
makeItem: function(item) { 
  return Ember.Object.create(item);
}),
cloneItems: function() { 
  this.set('transformedContent', this.get('content').map(this.makeItem));
}.observes('content'),
如果您想要最佳实践,那么我将创建一个,在项目来来去去时对其进行转换,您将能够重复使用

transformedContent: App.computed.objectArray('content')