2016-01-28 3 views
2

у меня есть маршрут в уголек определяется как например:Scoping emberjs параметры запроса к контроллеру

this.route('products', { path: '/t' }, function() { 
    this.route('index', { path: '/:taxon' }); 
}); 

Так что я могу посетить следующие ссылки:

  • /т/рубашки
  • /т/обувь
  • /т/и т.д ...

еа ch из них может также иметь ряд параметров запроса. Например, я мог бы сделать заявку на красные рубашки, подобные этому /t/shirts?colour=red. Это здорово, но я хочу сохранить параметры запроса в экземпляре контроллера вместо модели. Поэтому, если бы я искал красные рубашки, а затем перешел к изучению обуви (через {{# link-to}}), тогда параметры запроса будут доступны на этом маршруте, например, /t/shoes?colour=red. В настоящее время я, похоже, не в состоянии это сделать.

Я нашел ссылку на что-то в документации на ember, в которой указано, что я могу установить область видимости в «контроллер» showMagnifyingGlass, и это будет делать то, что я намереваюсь, но он, похоже, не работает. У меня есть неправильный конец палки с showMagnifyingGlass? Я считаю, что в этом суть областей запроса для экземпляра контроллера, а не для модели, поэтому, если бы я нажал на ссылку, которая изменяет модель маршрутов, она не влияет на параметры запроса.

Это то, что я включил в мой контроллер:

queryParams: [{ 
    showMagnifyingGlass: { 
    scope: 'controller' // Scope the parameters to the controller so transitions share state. 
    } 
}] 

ответ

2

Вы можете достичь этого путем, определяя свои параметры запроса на контроллер верхнего уровня:

приложения/продукты/controller.js

import Ember from 'ember'; 

export default Ember.Controller.extend({ 
    queryParams: ['color'], 
    color: 'red' 
}); 

Затем инъекционного контроллер верхнего уровня в любой другой контроллер:

приложения/продукты/индекс/controller.js

import Ember from 'ember'; 

export default Ember.Controller.extend({ 
    productsController: Ember.inject.controller('products'), 
    color: Ember.computed.reads('productsController.color') 
}); 

Затем установите параметры запроса верхнего уровня на ссылках другого контроллера:

приложения/продукты/индекс/template.hbs

{{link-to 'shirts' (query-params color=color)}} 
{{link-to 'pants' (query-params color=color)}} 
{{link-to 'shoes' (query-params color=color)}} 

Вот an ember twiddle of the code above in action и more info on injecting controllers друг в друга.

+0

Не уверен, что это то, что я ищу. Названия элементов (например, рубашки, брюки, обувь) являются динамическими сегментами и поэтому переходят на «{{# link-to 'products' 'shirts' (query-params color = color)}}'. Будет ли это решение работать в этом случае? – tomasbasham

+0

Я обновил подсказку, чтобы разместить маршруты, которые у вас есть! –

+0

Работает отлично. благодаря – tomasbasham

Смежные вопросы