Emberjs 1.0.0-RC3:有没有更好的方法为#render设置模型属性

时间:2013-05-27 01:21:04

标签: ember.js handlebars.js ember-router

代码,这是 jsfiddle for the code 。但是,我不喜欢我用来让 {[render}} 工作的方法。现在,为了能够在application-template中使用 {{render events}} ,我需要使用setupController在application-route中设置它,然后调用 controllerFor('events')< / em>,否则无效。但我已经定义了一个带有模型钩子的EventsRou​​te来设置控制器内容,并且希望 {{render helper}} 使用EventsRou​​te中的模型集。

我想知道除了目前进入ApplicationRoute 的方法之外,是否有更好或更惯用的方式在ember中执行此操作。

相关代码 *

  App.Router.map(function(){
    this.resource('events');
  });

应用程序模板中的{{render'events'}}仅在我通过应用程序路径设置模型时才有效。

 App.ApplicationRoute = Ember.Route.extend({
   setupController: function(){
     this.controllerFor('events').set('model', App.Event.find());        
   }
 });

我更希望{{render'events'}}使用此处设置的内容,但事实并非如此。但我现在要保留在使用{{#linkTo}}可能有意义的地方使用。

 App.EventsRoute = Ember.Route.extend({
    model: function(){
    return App.Event.find();  
    },

   setupController: function(controller, model){ 
         controller.set('content', model);
    }
});

模板

   <script type="text/x-handlebars" data-template-name="application">
     {{render 'events'}}
      {{outlet}}
  </script>

  <script type="text/x-handlebars" data-template-name="events">

        <button {{action 'yEmpty'}}> log event content is empty</button>

       {{#each controller}}
        <h3>{{title}}</h3>
       <p>{{start}} - {{end}}</p> 
      {{/each}}
    {{outlet}}
 </script>

1 个答案:

答案 0 :(得分:0)

我不确定你要做什么。您是否希望在一个页面上同时呈现eventsappointments?如果是,那么,我想,你需要使用render(就像你在jsfiddle中那样)。如果没有,您可以删除{{render 'events'}}上的setupControllerApplicationRoute段,并重定向到events路由。

我发现此issueFixture Adapter一起,看起来它不适用于hasMany(因此jsfiddle示例不起作用)但我假设您正在使用{{1} }。

更新:

设置模型的另一个地方是RESTAdapter挂钩,如此:

init

就个人而言,我会将代码留在App.EventsController = Ember.ArrayController.extend({ init: function () { this.set('model', App.Event.find()); } }); 挂钩。