我有一个带搜索栏的页面。输入文本并单击回车后,将在URL中的查询(即... / search / banana)转换到同一页面。由于模型和setupController挂钩的方式,我设置了我的代码如下:
模型:使用传递的文本 /更新搜索文本字段,并将控制器的模型更改为当前的JavaScript时间戳,以确保Ember调用setupController /
setupController:从搜索字段中获取文本,然后应使用正确的搜索结果更新模型。
我在模型钩子中所做的是一个黑客,但我不确定如何以与我的URL要求保持一致的方式执行此操作(无论有人手动输入适当的URL,搜索都应该起作用,或发生过渡)
我很感激,如果有人能告诉我是否有一种“正确”的方式来确保调用setupController,无论Ember是否认为模型已经改变(这似乎是当前需要黑客攻击的罪魁祸首) 。)
答案 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的角度来看,每次发生新搜索时,模型都会更改。将查询视为主要模型,将搜索结果视为“属于”查询的模型集合。