【问题标题】:Transition to same route with same model转换到相同型号的相同路线
【发布时间】:2014-01-17 10:40:46
【问题描述】:

我有一个“过滤器”模型,用户可以通过点击页面来改变这个模型。

因此,当用户对模型进行更改时,我想转换到他当前所在的同一条路线,因为 URL 会根据模型的详细信息而有所不同(我已经在路由上覆盖了“序列化”确保是这种情况)。

就目前的情况而言,Ember 似乎无视我的请求,以相同的模型过渡到相同的路线。模型已更改,我的模板也已更改,但我希望 URL 也能反映对过滤器的更改。

我该怎么做?

编辑:

这是我的 ApplicationController 中的代码

App.ApplicationController = Ember.Controller.extend
    currentFilter: null

    actions:
        toggleRegion: (region_id) ->
            region = this.store.getById('region', region_id)

            filter = this.get('currentFilter')

            # modify the filter
            if filter.containsAtLeastOneCityOfRegion(region)
                filter.disableRegion(region)
            else
                filter.enableRegion(region)

            this.replaceRoute('listings', filter)

现在,当我在“索引”路由中时,这可以按预期工作,但是如果我已经在“列表”路由中,则模型会按预期修改,但不会发生路由替换,因此,我的 URL未使用正确的动态段更新(来自我的 ListingsRoute 的“序列化”方法)。

【问题讨论】:

  • 请添加您的代码。
  • 您是否使用 transitionToRoute(emberjs.com/api/classes/…) 传递新模型?
  • 从我的代码中可以看出,我现在使用的是“replaceRoute”,但传递的是相同(但已修改)的模型对象。

标签: ember.js ember-router


【解决方案1】:

如果您想转换到(或替换,就像我的情况)到您所在的同一条路线,Ember 似乎不会执行任何操作,模型对象与当前模型具有相同的身份。

所以我需要做的是克隆对象,进行我需要进行的更改,然后然后进行转换。

【讨论】:

  • 如何克隆对象?
  • 我包含了“Ember.Copyable” mixin,并实现了“copy”方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-15
  • 2017-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-03
相关资源
最近更新 更多