我有一个主页面,对于这个例子,我将其称为Book
。有BookController
,Book
(模型),BookRoute
和book
(模板)。
在book
模板中,有一个搜索表单,允许使用该应用程序的人搜索数据库中的作者(可能与当前book
无关的作者。我d喜欢这个搜索表单由它自己的模型/视图/控制器/路由管理,因此它可以很容易地在应用程序的其他部分中删除。所以我在{{render "search"}}
模板中使用book
然后我制作了SearchController
,SearchResult
,SearchRoute
和search
模板:
<!-- template -->
{{input type="text" value=query}}
<button type="button" {{action "search"}}>Search</button>
// main controller
App.SearchController = Ember.ArrayController.extend({
itemController: 'search-result',
query: '',
actions: {
search: function () {
console.log('in controller');
return true; // returning true to have it bubble to the route
}
}
});
// item controller to decorate each search result
App.SearchResultController = Ember.ObjectController.extend({
});
// route for the search controller
App.SearchRoute = Ember.Route.extend({
actions: {
search: function () {
console.log('in route');
}
}
});
正如您所看到的,我希望用户点击搜索按钮,进入SearchController的操作,然后冒泡到SearchRoute。根据此图表,这应该是如何工作的:http://emberjs.com/images/template-guide/action-bubbling.png
看看上面的图表,我认为行动将走这条道路:
搜索按钮 - &gt; SearchController - &gt; SearchRoute
但是,这就是发生的事情:
搜索按钮 - &gt; SearchController - &gt;的 BookRoute
而不是转到SearchRoute
,行动正在冒泡到BookRoute
,这不是我想要放置功能的地方。我有什么方法可以让行动转到SearchRoute
吗?或者我设计的东西完全错了?
答案 0 :(得分:0)
路由适用于可路由的内容,即使用URL可以访问的内容。与BookRoute
一样。
但是,如果您只是使用{{render}}
在模板内渲染控制器,则不会创建任何路径(显然)。
为什么你想让它泡到自己的路线呢?只需在SearchController
。
(根据实际情况,您可以尝试在ApplicationRoute
内处理它。)