将本机数组/对象转换为 Ember.Array/Ember.Object 的最佳实践

Best practise to transform native array/object into Ember.Array/Ember.Object

本文关键字:Ember Object 最佳 Array 本机 数组 对象 转换      更新时间:2023-09-26

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

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

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'),
});
这样做

的最佳做法是什么?

谢谢

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

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

这里的工作示例

如果你在组件中需要对象是因为你正在做this.get(..那么你可以通过Ember.get(..来绕过。

如果不是这种情况,那么我建议将组件绑定到转换后的属性,而不是原始content

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')
相关文章: