我想单击“导出”按钮并转到“home”路径,并将“export”查询参数设置为true。我不希望这个查询参数刷新我的路线。所以这是我的路线的样子:
export default Route.extend(ApplicationRouteMixin, {
queryParams: {
export: {
refreshModel: false
}
}
})
在我的控制器中,我正在尝试观察查询参数并调用一个为我导出的函数,之后我想将查询参数设置为null。这是我的控制器:
import Ember from 'ember'
const {Controller, inject} = Ember
export default Controller.extend({
// == Dependencies ==========================================================
session: inject.service(),
// == Keyword Properties ====================================================
queryParams: ['export'],
export: null,
queryParamsObserver: function () {
if (this.get('export')) {
this.exportFile()
this.set('export', null)
}
}.observes('export'),
// == Functions =============================================================
exportFile () {
},
// == Actions ===============================================================
actions: {
}
})
但我的问题是,当我将查询参数设置为null时,它不会在网址上发生变化。我想知道我在这里失踪了什么并没有导致这种行为。 另外,我想知道使用观察查询参数是否是触发某些操作的最佳解决方案。
答案 0 :(得分:1)
第一个选项,使用service
并通过应用程序路径或按钮组件触发导出似乎更适合您的情况。您可以在所有路线中使用它。用户在导出时保持相同的路线。我会用这个选项。
第二个选项是将exportFile
转换为thennable
函数。导出完成后,您可以清除queryParams。以下是a working twiddle。
答案 1 :(得分:1)
您的案例的问题与以下事实有关:您在控制器中设置export
太早,查询参数更改未反映到网址。了解Ember.run循环并非易事。您应该通过阅读following来开始学习运行循环。
请查看以下twiddle,如果您将export
中的Ember.run.scheduleOnce
设置包含在旋转中,则会在网址中清除export
。 (实际上它会被立即删除;你永远不会看到它变为真;如果你将一个导出函数和export
标志清除在一个承诺中;让我们说它会在几秒后解决;然后你会看到它会成为true
然后将被移除。)
关于使用观察员的问题;我看不到你能用你当前的设计做什么。原因是;你是说refreshModel
是假的;因此,如果您已在同一路径内,则路由中没有任何可用的钩子方法可以在控制器内触发export
功能。你需要改变你的设计; ykaragol建议的可能是一个很好的起点。