我正在尝试整理一个简单的主要细节Ember应用程序。一侧是目录树,另一侧是文件列表。
Ember提供了很少的帮助器来将上下文渲染到视图中。我可以用它们中的哪一个:
事实上,如果有人可以向我指出我可以阅读的有关{{render view}}
,{{view view}}
和{{control view}}
助手之间差异以及如何正确使用它们的任何文档,那将会非常有用。
非常感谢!
答案 0 :(得分:31)
{{view "directory"}}
在当前控制器的上下文中呈现视图。
{{render "directory"}}
在单身App.DirectoryView
directory
呈现视图App.DirectoryController
{{control directory}}
的行为与render
的行为方式相同,只是每次呈现时都会创建App.DirectoryController
的新实例(与每次使用相同控制器实例的render
不同)
{{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/