Ember {{render}}具有相应的Ember.route逻辑和模型?

时间:2014-07-17 01:09:16

标签: ember.js ember-data

关于模型(http://emberjs.com/guides/templates/rendering-with-helpers/),我不明白Ember {{render}}的解释。什么是“相应控制器的单例实例”?

When no model is provided it gets the singleton instance of the corresponding controller
When a model is provided it gets a unique instance of the corresponding controller

我正在尝试在页面上嵌入视图。我有一个Post页面,我想在Post页面中嵌入Comments / New,以便我可以在Post页面上发表评论。

我可以去评论/新评论并添加新评论。但是当我尝试使用{{render}}嵌入Post页面时,它有错误,因为它不包含CommentsNewRoute逻辑。

问题是我在CommentsNewRoute中有逻辑,但是当我使用{{render}}时它会忽略Route逻辑。如何让{{render}}只使用相应的Route逻辑?

CommentsNewRoute:

App.CommentsNewRoute = Ember.Route.extend({
  model: function(){
    return this.store.createRecord('comment');
  },
  actions: {
    willTransition: function(transition) {
      if (this.currentModel.get('isNew')) {
          this.get('currentModel').deleteRecord();
      };
    }
  }
});

CommentsNewController:

App.CommentsNewController = Ember.ObjectController.extend({
  actions: {
    save: function() {
      // do save new comment stuff
    }
  }
});

发布/索引.hbs模板:

<h1 class="page-header">Post {{id}}</h1>
{{render "comments/new"}} <<<<<< I want to embed the whole Comments/New page here, including the logic from CommentsNewRoute

路由器:

  this.resource('post', { path: '/posts/:id' }, function() {
    this.route('edit');
  });
  this.resource('comments', { path: '/comments' }, function() {
    this.route('new');
  });

版本:

DEBUG: ------------------------------- ember.js
DEBUG: Ember      : 1.6.0-beta.5 ember.js
DEBUG: Ember Data : 1.0.0-beta.8.2a68c63a ember.js
DEBUG: Handlebars : 1.3.0 ember.js
DEBUG: jQuery     : 1.11.1 ember.js
DEBUG: ------------------------------- 

1 个答案:

答案 0 :(得分:0)

是的,{{render}}对路线一无所知,完全独立于路线。对于render使用的控制器,模型将要求它从其他地方获取它。如果你没有通过渲染助手传递模型,你可以通过执行类似

的操作来填充控制器上的模型。
content: function() {
  return ['blue', 'green', 'red'];
}.property()

或在控制器init中设置。

通常,{{render}}最适用于页面上的独立组件。想想一个独立于页面内容的通知小部件,但需要一个视图/模板/控制器,也许需要模型。由于您提到的原因,最好不要尝试将{{render}}用于路由也使用的控制器,其中路由逻辑(例如modelsetupController将会不可用。相反,将您的逻辑分解出来,使{{render}}独立,然后从路径的模板中调用它。