我可以使用Ember.js(rc0)和Rails,并且有一个简单的应用程序正如我所期望的那样工作,但我想专注于一个特定的故事:
作为用户,我想在表单中键入“过滤器”文本,然后让我的ArrayController只显示那些与过滤器匹配的项目。例如,考虑一个联系人应用程序,该应用程序显示名称为“Ya%”...
的人警告:假设数据库包含数千条联系人记录。我不想在客户端上过滤这些联系人,在服务器上这样做更有意义。
问题: 我如何在ember.js / ember-data中执行此操作?在服务器上,我可以轻松地允许索引URL中的搜索参数过滤数据,因此它是一个可管理的列表,甚至可以将响应限制为20项。
我还可以使用视图访问我的控制器中的过滤器文本,但下一步该怎么做?如何将该过滤器传递到服务器上?
更新
我能够在模型对象上使用“find”,并且ember(ember数据)进入服务器以获取新数据 - 因为客户端只有一个接收记录的子集开始。
,而不是对客户端上的内容进行过滤,它会自动延迟到服务器...这很好。App.ContactIndexController = Ember.ArrayController.extend
search_term: null
submit: (view) ->
this.set('content', App.Contact.find({search: "#{view.search_term}"}))
答案 0 :(得分:2)
这是findQuery
的一个很好的用例。例如:
store.findQuery(App.Contact, {q: queryString})
这将在适当的适配器上调用findQuery
,如果成功,则将返回的记录加载到商店并返回DS.AdapterPopulatedRecordArray
。
请注意,您可以完全自定义查询对象,以包含与服务器端点匹配的参数。
更新:正如迈克尔在评论中指出的,上述内容相当于:
App.Contact.find({q: queryString})
...这当然是一种更清洁的解决方案,尤其是在没有直接进入商店的情况下。