2

我可以使用 Ember.js(rc0) 和 Rails,并有一个简单的应用程序按我的预期工作,但我想专注于一个特定的故事:

作为用户,我想在表单中输入“过滤器”文本,然后让我的 ArrayController 只显示那些与过滤器匹配的项目。例如,考虑一个联系人应用程序,该应用程序显示名称为“Ya%”的人......

警告:假设数据库拥有数千条联系人记录。我不想在客户端过滤这些联系人,在服务器上这样做更有意义。

问题:如何在 ember.js/ember-data 中执行此操作?在服务器上,我可以轻松地允许在我的索引 URL 中使用搜索参数来过滤数据,因此它是一个易于管理的列表,甚至可以将响应限制为 20 个项目。

我也可以使用视图来访问我的控制器中的过滤器文本,但接下来我该去哪里呢?如何将该过滤器传递到服务器上?

更新:

我能够在模型对象上使用“查找”,并且 ember(ember 数据)去服务器获取新数据——因为客户端只有所有联系人记录的一个子集。它没有过滤客户端上的内容,而是自动推迟到服务器......这很好。

App.ContactIndexController = Ember.ArrayController.extend
 search_term: null
 submit: (view) ->
   this.set('content', App.Contact.find({search: "#{view.search_term}"}))
4

1 回答 1

2

这是一个很好的用例findQuery。例如:

store.findQuery(App.Contact, {q: queryString})

这将依次调用findQuery适当的适配器,如果成功,将返回的记录加载到存储中并返回一个DS.AdapterPopulatedRecordArray.

请注意,您可以完全自定义查询对象以包含与您的服务器端点匹配的参数。


更新:正如迈克尔在评论中指出的那样,以上等同于:

App.Contact.find({q: queryString})

...这当然是一种更清洁的解决方案,尤其是在没有直接进入商店的情况下。

于 2013-02-26T20:15:54.957 回答