1

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

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

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

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

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

4

2 回答 2

0

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

于 2013-09-17T03:36:43.753 回答
0

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

申请模板:

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

应用程序.js:

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

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

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

或任何你想要的逻辑。

于 2013-09-16T00:55:56.570 回答