【问题标题】:Ember-data resets queryParam to default valueEmber-data 将 queryParam 重置为默认值
【发布时间】:2015-10-22 08:17:51
【问题描述】:

在我的模型中,我的 queryParam 状态在我的路由中设置为 refreshModel true。

queryParams: {
    status: {
        refreshModel: true
    }
}

在我的控制器中,此参数默认设置为“打开”:

App.ConversationsController = Ember.ArrayController.extend({
    queryParams: ['status']
    status: 'opened'
});

每次我将此参数设置为其他值时,例如“全部”,Ember-data 将其重置为“已打开”并对我的模型挂钩进行两次调用而不是一次调用,并且在我的模型上的断点中观察到了这种行为钩子(我不知道它在哪里重置),一个带有 param:opened 和一个带有 param:all。我什至在上面放了一个观察者,它有效地做到了。

请注意,我已经搜索了我的代码,并且几乎没有任何地方可以将此参数设置回原始值。

有什么提示吗?

【问题讨论】:

    标签: ember.js ember-data


    【解决方案1】:

    您还必须在控制器中将它们声明为路由中的预期参数

    App.ConversationsController = Ember.ArrayController.extend({
        queryParams: ['status'],
        status: 'opened'
    });
    

    Ember 具有粘性参数,如文档所述。

    默认情况下,Ember 中的查询参数值是“粘性的”,如果你 更改查询参数,然后离开并重新输入路线, 该查询参数的新值将被保留(而不是重置 为其默认值)。这是一个特别方便的默认保存 在路由之间来回导航时排序/过滤参数

    你可以在这里查看更多...ember query params

    您可以尝试在您的路线中重置它们

    resetController: function (controller, isExiting, transition) {
            if (isExiting) {
              //reset controller to avoid sticky params
              controller.set('status', DEFAULT_VALUE);
            }
        },
    

    【讨论】:

    • 好吧,这太奇怪了。我有两个 git 分支相互更新。他们真的是最新的。在开发分支上,会发生此错误,在触发模型挂钩之前,某处的 queryParams 状态会更改回默认值。在对话分支上,这个问题不存在,参数保持想要的值。我再说一遍,这是相同的代码!你知道会发生什么吗? (我什至将整个代码复制粘贴到另一个分支中,发生错误)。
    • 我需要看一个例子,也许在 js bin 中...可能与 ember 中的保留字冲突...但我只是在猜测
    • 我无法让一个好的 jsBin 工作,非常抱歉!也许您知道我的相关问题的答案:stackoverflow.com/questions/31749330/… 哦,顺便说一下,我已经声明了我的 queryParams,我只是忘记将它包含在我将编辑的示例中。
    • 我发现了问题!我的应用程序中有两个版本的 ember-data,但我并不知道。在开发分支上,添加 ember-rails 和 ember-source 后我没有运行 bundle install。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-30
    • 2011-04-06
    • 2012-10-31
    相关资源
    最近更新 更多