【问题标题】:Ember {{render}} with the corresponding Ember.route logic and model?Ember {{render}} 与对应的 Ember.route 逻辑和模型?
【发布时间】:2014-09-07 17:19:36
【问题描述】:

当谈到模型 (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

我正在尝试在页面上嵌入视图。我有一个帖子页面,我想在帖子页面中嵌入评论/新建,以便我可以在帖子页面上发表评论。

我可以去 cmets/new 并添加一条新评论。但是当我尝试使用 {{render}} 嵌入帖子页面时,它会出现错误,因为它不包含 CommentsNewRoute 逻辑。

问题是我在 CommentsNewRoute 中有逻辑,但是当我使用 {{render}} 时,它似乎忽略了路由逻辑。如何让{{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: ------------------------------- 

【问题讨论】:

    标签: ember.js ember-data


    【解决方案1】:

    是的,{{render}} 对路由一无所知,完全独立于它们。对于渲染使用的控制器来说,拥有一个模型将需要它从其他地方获取它。如果您没有将渲染助手传递给模型,您可以通过执行类似的操作在控制器上填充模型

    content: function() {
      return ['blue', 'green', 'red'];
    }.property()
    

    或将其设置在控制器的init

    一般来说,{{render}} 最适合用于页面上的独立组件。考虑一个独立于页面内容的通知小部件,但需要一个视图/模板/控制器,也许还有模型。由于您提到的原因,最好不要尝试将{{render}} 用于路由也正在使用的控制器,其中modelsetupController 等路由逻辑将不可用。相反,将您的逻辑分解为独立的 {{render}},然后从您的路由模板中调用它。

    【讨论】:

    • 或将模型传递给渲染助手。
    • 我无法将this.store.createRecord('comment') 传递给渲染助手。我正在努力实现的最佳实践是什么?
    • “通过”是什么意思?你可以简单地说this.set('content', this.store.create.createRecord(...
    • 我做不到{{render "comments/new" this.store.createRecord('comment')}}。我不能只将content 设置为新的“评论”,因为该页面是PostIndex 页面。或者我应该把它设置在CommentsNewController 中的init 中?谢谢!
    猜你喜欢
    • 2011-04-21
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-01
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    相关资源
    最近更新 更多