ember.js中具有不同路径的动态导航栏

时间:2015-10-25 11:17:36

标签: ember.js ember-cli

我试图在ember中创建动态导航栏。我在应用程序模板中包含了一个部分标题,其中包含一个元素' search'这应该只在我到达我的事件索引路线时才可见。我试图这样做:

ApplicationController = Ember.Controller.extend(
  eventsIndexController: Ember.inject.controller 'events/index'
  isSearchActive: Ember.computed 'eventsIndexController.showSearch', ->
    @get 'eventsIndexController.showSearch'

在事件索引控制器中:

EventsIndexController = Ember.Controller.extend(
  showSearch: false

当它到达事件索引路径

EventsIndexRoute = Ember.Route.extend(
  model: ...

  setupController: (controller, model) ->
    controller.set('model', model)
    controller.set('showSearch', true)
  deactivate: ->
    @controllerFor('events.index').set('showSearch', false)

它工作正常 - 模型设置正确,搜索选项仅在事件索引路径中可见。问题是我想在单击搜索时执行某些操作,但由于此操作在 EventsIndexController 中声明,因此我无法从应用程序模板以正常方式调用它。所以我的第一个问题是:

  • 你知道如何实现这个目标吗?

第二个问题是:

  • 我怎样才能以更好的方式完成我想做的事情,因为它 似乎不是很清楚的方式,它可能会变得非常复杂 在一段时间内,我需要新的动态细分。

1 个答案:

答案 0 :(得分:1)

由于您已将EventsIndexController注入ApplicationController,因此您可以在此处单击搜索,然后使用send方法在注入的控制器上触发所需的操作。

ApplicationController = Ember.Controller.extend({
    eventsIndexController: Ember.inject.controller('events/index'),
    actions: {
        searchClicked: function() {
            this.get('eventsIndexController').send('searchClicked');
        }
    }
});

或者,您可以直接在注入的控制器上调用方法。