我试图在嵌套路线中进行搜索,尤其是共享模型。
这是我的代码示例
产品和搜索返回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
答案 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 });
使用前一个端点。