Ember.js如何创建一个我可以索引的数组

时间:2013-07-27 20:17:57

标签: arrays ember.js controllers indices

我在索引数组时遇到问题。从四处查看,我找到了一些如何通过视图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代码如何挂钩到这个扩展控制器。

任何有助于澄清这一点的想法都将受到高度赞赏。

1 个答案:

答案 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