【问题标题】:Dynamic navigation bar in ember.js with different routesember.js 中具有不同路由的动态导航栏
【发布时间】:2024-01-14 02:54:01
【问题描述】:

我正在尝试在 ember 中创建一个动态导航栏。我有一个包含在应用程序模板中的部分标题,它有一个元素“搜索”,只有在我到达我的事件索引路由时才应该可见。我试过这样做:

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 中声明的,因此我无法从应用程序模板中以正常方式调用它。所以我的第一个问题是:

  • 您知道如何实现吗?

第二个问题是:

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

【问题讨论】:

    标签: ember.js ember-cli


    【解决方案1】:

    由于您已经将EventsIndexController 注入到ApplicationController 中,您可以在那里处理搜索点击,然后使用send 方法在注入的控制器上触发所需的操作。

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

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

    【讨论】: