【问题标题】:Ember.js router, get router from ViewEmber.js 路由器,从 View 获取路由器
【发布时间】:2012-08-09 21:28:43
【问题描述】:

我有一个基于 ember.js 路由器的应用程序,需要在转换到不同的应用程序状态之前对某个操作执行一些基本逻辑。我的按钮操作看起来像

<button {{action doSomethingThenNavigate target="view"}}>Compute the Change</button>

我会在我的Ember.View 子类上有一个doSomethingThenNavigate 方法。

我的问题是我不知道如何让路由器从视图中触发更改,我试过了

doSomethingThenNavigate: ->
    console.log "computing something..." 
    App.router.showCat()

showCat() 是我路由器上的一个方法。这不起作用。

我有一个 jsfiddle 来说明问题HERE

【问题讨论】:

    标签: javascript ember.js coffeescript ember-old-router


    【解决方案1】:

    这是工作的fiddle

    你应该使用:

    App.router.send('showCat')
    

    代替:

    App.router.showCat()
    

    【讨论】:

    • 虽然这行得通,但它是一个非常紧密的耦合,并且视图的事件句柄不容易测试。你不应该直接使用App.router。我建议在视图的事件中使用this.get('controller.target').send('showCat', event);。使用路由器时,controller.target默认设置为路由器。
    • @pangratz 有什么理由使用 this.get('controller.target') 而不是 App.router?为什么 Ember 在应用初始化期间在所有控制器中设置目标属性?
    • @ManoHaran 抱歉,我想我的建议很清楚:当您在事件处理程序中直接使用App.router 时,您的代码是紧密耦合的。它可能与您的代码无关,因为您总是希望将事件发送到路由器。如果你想在另一个命名空间的另一个应用程序中重用你的视图怎么办?为了更灵活,我会改用controller.target...
    • @ManoHaran 当您在应用程序中使用路由器并使用App.initialize(); 时,控制器的target 设置为这个路由器,是的。
    猜你喜欢
    • 2012-07-25
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多