【问题标题】:Is there a "right" way to make the setupController hook fire consistently?是否有一种“正确”的方法可以使 setupController 挂钩始终如一地触发?
【发布时间】:2013-09-16 00:43:06
【问题描述】:

我有一个带有搜索栏的页面。输入文本并单击回车后,会跳转到带有 URL 中的查询的同一页面(即 .../search/banana)。由于模型和 setupController 钩子的触发方式,我将代码设置如下:

模型:使用传递的文本更新搜索文本字段,/并将控制器的模型更改为当前的 JavaScript 时间戳,以确保 Ember 调用 setupController/ em>。

setupController: 从搜索字段中获取文本,然后应使用正确的搜索结果更新模型。

我在模型钩子中所做的是一个 hack,但我不确定如何以与我的 URL 要求保持一致的方式执行此操作(无论是否有人手动输入适当的 URL,搜索都应该工作,或transitionTo发生)

如果有人能告诉我是否有一种“正确”的方法来确保无论 Ember 是否认为模型已更改(这似乎是目前需要进行黑客攻击的罪魁祸首),我将不胜感激.)

【问题讨论】:

    标签: ember.js


    【解决方案1】:

    我自己不使用 setupController,但是如果整个应用程序都使用了搜索栏,你应该在 ApplicationController 上定义它。如果没有,您可以在控制器中定义它。

    应用模板:

    {{view Ember.TextField valueBinding="searchKeyword" action="doSearch"}}
    

    App.js:

    App.ApplicationController = Ember.Controller.extend({
        searchKeyword: '',
        actions: {
            doSearch: function()
            {
               var keyword = this.get('searchKeyword');
               // do your logic here
            }
        }
    });
    

    当用户点击回车时,它会触发 doSearch 动作,你可以这样做

    this.get('model').filter()
    

    或任何你想要的逻辑。

    【讨论】:

    • 这完全忽略了我的要求,即搜索状态在 URL 中很明显,并且使用该 URL 会导致该搜索状态。这不是问题,功能都在那里,而且一切正常。只是感觉很hacky。我想要 setupController 始终运行,即使模型没有改变。
    【解决方案2】:

    @dgbonomo,我认为您现有的方法很棒。从 Ember 的角度来看,您的模型在每次发生新搜索时都会发生变化。将查询视为主要模型,将搜索结果视为“属于”查询的模型集合。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-14
      • 2022-06-10
      • 2014-12-13
      • 2013-05-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多