ember.js connectControllers()
如果您有两个不同的页面(称为home和Post),它们共享几乎完全相同的内容和功能,那么如何最好地将一个页面绑定到另一个页面 在本文中,我将一个视图的内容与另一个视图的内容关联起来,方法是直接在路由器中设置它,如下所示:ember.js connectControllers(),ember.js,Ember.js,如果您有两个不同的页面(称为home和Post),它们共享几乎完全相同的内容和功能,那么如何最好地将一个页面绑定到另一个页面 在本文中,我将一个视图的内容与另一个视图的内容关联起来,方法是直接在路由器中设置它,如下所示: Router: Ember.Router.extend({ root: Ember.Route.extend({ //transitions home: Ember.Route.extend({ route: '/',
Router: Ember.Router.extend({
root: Ember.Route.extend({
//transitions
home: Ember.Route.extend({
route: '/',
connectOutlets: function(router) {
var posts = router.get('postsController.content');
router.get('homeController').set('content', posts);
router.get('applicationController').connectOutlet('home');
},
}),
//posts and other states
})
})
但是:如果帖子内容更新了,我真的不需要即时更新主页内容,但是如果我更新了,会吗
还有别的路吗?是否可以使用ConnectController(),然后在何处使用?以下是我的-失败-尝试:
您可以使用
模板
帮助器
<script type="text/x-handlebars" data-template-name="posts">
<div class="right"><h2>posts page</h2>
{{template "posts-details"}}
</div>
</script>
<script type="text/x-handlebars" data-template-name="posts-details">
{{#each post in content}}
<article>
<h3><a {{action "doPost" context="post"}} {{bindAttr id="post.id"}}>{{post.title}}</a></h3>
<p>{{post.date}}</p>
</article>
{{/each}}
</script>
帖子页面
{{模板“发布详细信息”}
{{#内容中的每个帖子}
它几乎可以工作了,但在帖子页面中有一个“主页”h2。更新了fiddle&answer。。。Thx@sly7_7!:-)酷,我以前从未用过那个助手。{{template“my template”}和{{view Ember.view templateName=“my template”}}之间的主要区别是{{template}}不会生成另一个Ember视图对象吗?就是这样。这种情况下不需要Ember.View,因为没有特定的处理程序、计算属性等。欢迎光临,没问题。问题是:如果在home
中使用connectControllers
,则必须迭代postsController
,但在posts.index
中,必须迭代内容
。。。一个(并非真正干净的)解决方法是在模板中迭代控制器.postsController
,并避免任何绑定。使用ConnectController的尝试几乎不错,您只需看到homeView的上下文就是homeController。将postsController连接到homeController时,不会自动连接其内容。因此,在“主”模板中,您只需用postsController
替换content
。看:@sly7_7谢谢,太好了!但是,不能将您的评论标记为已被接受的答案。看到您的例子,我认为@MikeAski的答案应该是正确的。(因为上下文是相同的,并且视图为)。如果要在控制器之间共享数据,您将使用ConnectController。@sly7_7 am正在检查。我得多练习我的问题表达法。您的评论直接回答了我的问题“是否可以使用connectControllers()…”+问题标题=“ember.js connectControllers()”
<script type="text/x-handlebars" data-template-name="posts">
<div class="right"><h2>posts page</h2>
{{template "posts-details"}}
</div>
</script>
<script type="text/x-handlebars" data-template-name="posts-details">
{{#each post in content}}
<article>
<h3><a {{action "doPost" context="post"}} {{bindAttr id="post.id"}}>{{post.title}}</a></h3>
<p>{{post.date}}</p>
</article>
{{/each}}
</script>