2014-10-23 13 views
0

Я пытаюсь выполнить поиск внутри вложенного маршрута, особенно в том, что модели share.Ember js поиск вложенных маршрутов

Вот мой пример кода

Продукты и поиска возвращает JSON

маршрутизатор

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

Остальное адаптер апи URL я пытаюсь достичь следующего:

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

У меня есть n в контроллере меню заголовка для поиска

Как найти записи внутри вложенного маршрута?

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 }); 
     } 
    } 
}); 

я получаю следующие ошибки -

Error: Assertion Failed: You must include an id for Market.Product in an object passed to push

Uncaught Error: Assertion Failed: Error: Assertion Failed: You must include an id for Market.Product in an object passed to push

ответ

0

Ошибка вы видите вызвана JSON, возвращаемых из вашего метода this.store.find. Ember-data ожидает, что все объекты модели будут иметь заданное свойство id. Если вы проверите JSON, который возвращается из конечной точки API, вы, вероятно, обнаружите, что на объекте нет свойства id.

Убедитесь, что JSON, который вы возвращаете, имеет свойство id, определенное (на каждом объекте продукта), и ошибка должна быть разрешена.

0

Это был мой временный подход, возможно, там есть лучшие решения.

Чтобы получить вложенный ресурс для поиска, вы можете сделать следующее.

АНИ конечная точка была

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 }); 

С предыдущей конечной точкой.