Ember js搜索嵌套路线

时间:2014-10-23 22:17:15

标签: javascript search ember.js nested-routes

我试图在嵌套路线中进行搜索,尤其是共享模型。

这是我的代码示例

产品和搜索返回json

路由器

Market.Router.map ->
    @resource 'products'
    @resource 'search', { path: "products/search" }
    @resource 'product', { path: "products/:product_id" }

我试图实现的其余适配器api url如下:

http://api.url:3000/v1/products/search?search_terms="绳"

我在搜索的标题菜单控制器中有一个操作

如何在嵌套路线中找到记录?

Market.HeaderMenuController = Ember.ArrayController.extend({
    searchText: null,
    actions: {
        searchResults: function(){
             this.store.find('product', 'search?search_terms='+this.searchText);
             this.store.find('search', { "search_terms":this.searchText });
        }
    }
});

我收到以下错误 -

  

错误:断言失败:您必须在传递给id的对象中包含Market {Product}的push

     

未捕获错误:断言失败:错误:断言失败:您必须在传递给id的对象中包含Market {Product}的push

2 个答案:

答案 0 :(得分:0)

您看到的错误是由this.store.find方法返回的JSON引起的。 Ember-data期望所有模型对象都指定了id属性。如果检查从API端点返回的JSON,您可能会发现对象上没有id属性。

确保您返回的JSON定义了id属性(在每个'product'对象上)并且应该解决错误。

答案 1 :(得分:0)

这是我的临时方法,可能有更好的解决方案。

为了实现搜索的嵌套资源,您可以执行以下操作。

api端点是

http://api.url:3000/v1/products/search?search_terms= “绳索”

我为搜索路线创建了一个自定义适配器

Market.SearchAdapter = Market.ApplicationAdapter.extend(
  namespace: "v1/products"
)

用于搜索的自定义复数,并避免使用“搜索”端点

Ember.Inflector.inflector.rules.uncountable['search'] = true;
inflector = Ember.Inflector.inflector;
inflector.irregular('search', 'searches');

现在您可以运行商店查找搜索

this.store.find('search', { 'search_terms': this.searchText });

使用前一个端点。