{{outlet}},{{view}},{{render}}和{{control}}助手

时间:2013-03-07 01:19:59

标签: ember.js

我正在尝试整理一个简单的主要细节Ember应用程序。一侧是目录,另一侧是文件列表。

Ember提供了很少的帮助器来将上下文渲染到视图中。我可以用它们中的哪一个:

  1. 目录树的子树。
  2. 详情列表。
  3. 事实上,如果有人可以向我指出我可以阅读的有关{{render view}}{{view view}}{{control view}}助手之间差异以及如何正确使用它们的任何文档,那将会非常有用。

    非常感谢!

3 个答案:

答案 0 :(得分:31)

{{view "directory"}}在当前控制器的上下文中呈现视图。

{{render "directory"}}在单身App.DirectoryView

的上下文中使用模板directory呈现视图App.DirectoryController

{{control directory}}的行为与render的行为方式相同,只是每次呈现时都会创建App.DirectoryController的新实例(与每次使用相同控制器实例的render不同)

2014年2月18日更新:{{control}}已被删除。

最后两个助手相对较新,因此没有太多关于它们的文档。您可以找到{{view}}文档here

现在查看您的用例,我认为您不需要任何这些帮助。只需使用嵌套路由和{{outlet}}帮助器,它就可以正常工作。

App.Router.map(function(){
  this.resource('directories', function() {
     this.resource('directory', { path: '/:directory_id'}, function() {
       this.route('files');
     });
  });
});

您可以构建以下this guide

更新:{{render}}现在每次传递模型时都会创建一个新实例。

答案 1 :(得分:10)

有关帮助者渲染的非常良好解释,部分,插座和模板会查看此question

就像一个粗略的总结,如何使用这些助手:

{{render“navigation”}} - >在此处渲染NavigationController和NavigationView。这个辅助程序适用于控制器和视图不会改变的地方,例如导航。

{{outlet“detailsOutlet”}} - >这将提供一个存根/钩子/点,您可以在其中呈现组件(控制器+视图)。人们可以使用render method路由。在您的情况下,您可能会有一个细节路线,看起来像这样。这会将带有DetailsView的DetailsController呈现到索引模板的插座'detailsOutlet'中。

App.DetailsRoute = Ember.Route.extend({
  renderTemplate: function() {
    this.render('details', {   // the template/view to render -> results in App.DetailsView
      into: 'index',          // the template to render into -> where the outlet is defined
      outlet: 'detailsOutlet',       // the name of the outlet in that template -> see above
    });
  }
});

{{查看App.DetailsView}} - >这将呈现给定视图,同时保留当前上下文/控制器。人们可能会改变背景,例如使用您的主实体并将其详细信息传递给这样的视图:

  

{{查看App.DetailsView contextBinding =“masterEntity.details”}}

当您想要在子视图中封装组件的某些部分时,这是一个有用的帮助,它具有自己的自定义逻辑,如操作/事件的处理。

{{control}} 我知道控件每次使用时都会实例化一个新的控制器,但是我看不到适合你的控制器,也没有一个很好的例子来使用它。

答案 2 :(得分:2)

了解ember {{render}},{{template}},{{view}},{{control}}

之间的区别

你可以参考这篇文章

http://darthdeus.github.io/blog/2013/02/10/render-control-partial-view/