2017-04-08 49 views
0

我想单击“导出”按钮,并将“导出”查询参数设置为true,将其转移到路由“主目录”。我不希望这个查询参数刷新我的路线。因此,这里是我的路由是怎么样子:URL中未显示更改查询参数

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: { 
    } 

}) 

但我的问题是,当我设置的查询参数为空,也不会在URL上改变。我想知道我在这里错过了什么,不会导致这种行为。 另外,我不知道如果使用观察查询参数是触发某些操作的最佳解决方案。

+0

所以基本上你想'出口'始终为空,并只是用它来链接触发导出? – Lux

+0

好吧不总是空,我希望它被设置为null当我最初转移到该路线能够下载文件。然后在下载后立即将其设置为空。这个导出按钮在应用程序级别,可以从所有路线访问。所以用户将能够通过点击导出按钮再次将导出查询参数设置为真。 – user5471528

回答

1

与您的情况有关的问题与您在控制器中设置export太早以至于查询参数更改未反映到url中有关。了解Ember.run循环并不是微不足道的。您应该通过阅读following开始了解运行循环。

看看下面twiddle,如果您在Ember.run.scheduleOnce包裹的export设定为在玩弄然后你会看到export在URL中清除。 (事实上​​,它立即被删除,你永远不会看到它变成真实的;如果你包装导出功能和在承诺中清除export标志;假设这将在几秒钟后解决;然后你会看到它将变成true然后将被删除)。

关于你使用观察者的问题;我看不到你现在的设计可以做什么。原因是这样的;你说refreshModel是错误的;因此,如果您已经在相同的路线中,则在路径中没有可用的任何挂接方法来触发控制器内的export功能。你需要改变你的设计;什么ykaragol建议可能是一个很好的起点。

1

第一个选项,使用service并触发通过应用程序路径或通过按钮组件导出似乎更适合您的情况。您可以在所有路线中使用它。用户在导出时保持相同的路线。我会使用这个选项。

第二种选择是将exportFile转换为thennable函数。导出完成后,您可以清除queryParams。这里是a working twiddle给你。