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