Ember.js:行动泡沫到错误的路线

时间:2014-05-17 18:26:33

标签: javascript ember.js

我有一个主页面,对于这个例子,我将其称为Book。有BookControllerBook(模型),BookRoutebook(模板)。

book模板中,有一个搜索表单,允许使用该应用程序的人搜索数据库中的作者(可能与当前book无关的作者。我d喜欢这个搜索表单由它自己的模型/视图/控制器/路由管理,因此它可以很容易地在应用程序的其他部分中删除。所以我在{{render "search"}}模板中使用book

然后我制作了SearchControllerSearchResultSearchRoutesearch模板:

<!-- 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吗?或者我设计的东西完全错了?

1 个答案:

答案 0 :(得分:0)

路由适用于可路由的内容,即使用URL可以访问的内容。与BookRoute一样。

但是,如果您只是使用{{render}}在模板内渲染控制器,则不会创建任何路径(显然)。

为什么你想让它泡到自己的路线呢?只需在SearchController

中处理它

(根据实际情况,您可以尝试在ApplicationRoute内处理它。)