是否有一种“正确”的方法可以使setupController挂钩一致?

时间:2013-09-16 00:43:06

标签: ember.js

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

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

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

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

我很感激,如果有人能告诉我是否有一种“正确”的方式来确保调用setupController,无论Ember是否认为模型已经改变(这似乎是当前需要黑客攻击的罪魁祸首) 。)

2 个答案:

答案 0 :(得分:0)

我自己不使用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
        }
    }
});

当用户按Enter键时,它将触发doSearch操作,您只需

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

或任何你想要的逻辑。

答案 1 :(得分:0)

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