我在索引数组时遇到问题。从四处查看,我找到了一些如何通过视图http://jsfiddle.net/WSwna/14/
为控制器中的项目编制索引的示例我的应用程序从REST调用获取数据,如下所示
Videos.Store = DS.Store.extend({
revision: 12,
url: "http://localhost/",
adapter: Videos.Adapter
})
我的路由器如下
Videos.Router.map(function(){
this.resource('videos', {path: '/'});
this.route('forms');
})
Videos.VideosRoute = Ember.Route.extend({
model: function(){
return Videos.Video.find();
}
});
当我将HTML实现为
时{{#each controller}}
.....
{{/each}}
我的数据显示。
但是我想从链接http://jsfiddle.net/WSwna/14/中实现示例 但我生成一个Videos.VideosController并将其传递给{{#each iterator}}
时遇到问题我的视频.VideosController看起来像这样
Videos.VideosController = Ember.ArrayController.extend({
model: function(){
return Videos.Video.find();
}
});
Videos.VideoView = Ember.View.extend({
content: null,
adjustedIndex: function(){
return this.getPath('_parentView.contentIndex') + 1;
}.property()
});
但是当我在HTML中使用它时如下:
{{#each Videos.VideosController }}
我收到一条错误,告诉我内容必须实现Ember.Array。你通过了Videos.VideosController。据我所知,Ember提供了一个要迭代的默认数组集合,但现在我希望扩展这个控制器,我很难创建一个数据数组传递给视图。我也不清楚View代码如何挂钩到这个扩展控制器。
任何有助于澄清这一点的想法都将受到高度赞赏。
答案 0 :(得分:2)
但是我想从链接http://jsfiddle.net/WSwna/14/实现示例但是我在生成Videos.VideosController并将其传递给{{#each iterator}}
时遇到问题
尽管不是推荐的方式,但为了达到你想要用你的VideosController
做的事情,你应该创建一个实例而不是扩展。这看起来像这样:
Videos.videosController = Ember.ArrayController.create({
content: [{ name: 'Goodfellas' }, { name: 'The Aviator' }, { name: 'The Departed' }]
});
然后您可以像这样使用它来迭代:
{{#each Videos.videosController}}
...
{{/each}}
这里要注意两件事,我们不会扩展ArrayController
,而是直接创建它的实例,我们也使用小写videosController
来指出它是一个实例。
值得一提的是,controller
没有像model
那样的route
钩子。
希望它有所帮助。
修改强>
在您上次发表评论后,我意识到您真正想做的事情,所以我整理了一个小jsbin,展示了如何使用模型中的数据来提供Videos.videosController
的内容,看一看here
但基本上你要做的就是挂钩afterModel
的{{1}}钩子,并将已经检索过的模型传递给你的route
内容:
Videos.videosController