渲染模板未加载相关模型

时间:2013-11-21 05:07:13

标签: ember.js

相关信息

  • 我使用ember-rails设置了一个用于数据持久性的Rails 4.0 API服务器。
  • Ember版本:1.3.0-beta.1 + canary
  • Ember-Data Version:1.0.0-beta.4 + canary

假设我有一个包含类别列表的类别模型。我想在应用程序级别渲染它以用作导航。

这就是我所拥有的

# templates/application.hbs
{{ render categories }}
{{ outlet }}

# templates/categories.hbs
<h1>Categories</h1>
{{#each category in controller}}
    {{#link-to 'category' category}}
        {{category.title}}
    {{/link-to}}
{{/each}}

# routes/categories.js.coffee
App.CategoriesRoute = Ember.Route.extend
    model: ->
        @store.find 'category'

# models/category.js.coffee
App.Category = DS.Model.extend
    title: DS.attr('string'),
    slug: DS.attr('string')

# router.js.coffee
App.Router.map ->
    @resource 'categories', path: 'categories'
    @resource 'category', path: 'category/:slug'

访问/#/ categories路径会呈现我的期望;标题的两倍和链接列表,每个链接都指向一个类别。

如果我在'/'访问应用程序的根目录(Application.Index),我希望看到相同的结果,尽管只有一个链接列表的呈现。但是,结果只是单一标题而没有链接。使用Ember Inspector,看起来没有与{{render categories}}绑定的模型。

根据我的理解,渲染模板将使用相关的控制器和视图。将相关模型绑定到渲染模板的正确方法是什么?或者更好的是,实现相同结果的最佳做法是什么?

1 个答案:

答案 0 :(得分:1)

当您致电{{render categories}}时,它会使用类别控制器呈现类别模板。 CategoriesRoute仅在转到url中的类别路径时使用。为了在应用程序级别提供类别信息,您需要获取该级别的类别并将其存储在某个地方的应用程序控制器上以供渲染时使用。

 // controller would be application controller, and technically you wouldn't need to write controller
 {{ render 'categories' controller.categories }}  

http://emberjs.jsbin.com/IleQEFa/1/edit

在示例中,我在应用程序控制器上以someitems的名称附加了一组额外的模型。我在setupController中这样做,这是在该路由中解析模型后触发的钩子。

对于你,在setupController中我会做类似

的事情
 this.store.find('category').then( function(records){ controller.set('categories', records)});

或者也许这个,我不熟悉coffeescript

 @store.find("category").then (records) ->
   controller.set "categories", records