Javascript 将多个模型分组以在Ember CLI中迭代
我试图遵循Ember 2.3中的语法,但语法已被弃用。在Ember 2.0+的一个模板中,我是否可以将几种类型的模型分组到一个对象中进行迭代(如tumblr样式的仪表板) 原始问题:Javascript 将多个模型分组以在Ember CLI中迭代,javascript,ember.js,ember-cli,Javascript,Ember.js,Ember Cli,我试图遵循Ember 2.3中的语法,但语法已被弃用。在Ember 2.0+的一个模板中,我是否可以将几种类型的模型分组到一个对象中进行迭代(如tumblr样式的仪表板) 原始问题: stream: function() { var post = this.get('post'), bookmark = this.get('bookmark'), photo = this.get('photo'); var stream = []; stream.pushObjects(po
stream: function() {
var post = this.get('post'),
bookmark = this.get('bookmark'),
photo = this.get('photo');
var stream = [];
stream.pushObjects(post);
stream.pushObjects(bookmark);
stream.pushObjects(photo);
return stream;
}.property('post.@each', 'bookmark.@each', 'photo.@each'),
我的尝试:
stream: Ember.computed('post.[]', 'bookmark.[]', 'photo.[]', function() {
var post = this.get('post');
var bookmark = this.get('bookmark');
var photo = this.get('photo');
var stream = [];
stream.pushObjects(post);
stream.pushObjects(book);
stream.pushObjects(photo);
return stream;
}),
对你有用吗?如果没有,我的第一个猜测是你的变量(post、bookmark和photo)是余烬对象,是真实模型的包装。在模板中迭代此包装将不起作用。在这种情况下,您需要做的是检索它们的内容,即它们包装的真实数组数据
var post=this.get('post.content');var bookmark=this.get('bookmark.content');var photo=this.get('photo.content')代码>现在,post、bookmark和photo是可以合并到调用stream的单个数组中的数组。不幸的是,我的代码和为包含您的建议而编辑的代码都给了我以下错误:流类型的Object Inspector错误错误:必须传递Ember.Enumerable到Ember.MutableArray#pushObjects.Ok,告诉我们什么是post
属性?我猜这是一个记录数组,您在与控制器关联的路由中加载了this.store.query()
或this.store.findAll()
,不是吗?如果是,它应该返回一个InternalModels数组。我假设它是一个数组,因为您正在使用post.[]
和post.@each
。顺便说一句,如果使用stream.pushObject()
而不是stream.pushObjects()
,会发生什么?我不认为它是一个数组(请原谅我的无知),它是通过这个.store.findAll()调用的,而且它似乎是一个类?这里有一个“_content”属性,上面有一个“content”属性,其中的posts作为路由中的数组,如您所说。是的,这样应该可以工作:var arrayOfPosts=this.get('post').get('content');//返回[InternalModels*]/。。。对书签和照片执行相同的操作var stream=[];stream.pushObjects(arrayOfPosts)
this.get('post')
返回一个类,我将该类描述为findAll()
检索的所有数据的包装器。此类的属性内容包括以数组形式加载的所有数据。InternalModels数组。由于pushObjects()
需要一个数组作为参数,因此它应该可以工作。;-)