2016-02-21 4 views
0

Как я могу изменить данные модели на маршруте как реакцию на взаимодействие с пользователем, например нажатие кнопки?Ember: замена модели в обработчике действий

Я хочу иметь товарный маршрут поиска, где модель хранит элементы. Этот набор элементов может меняться, когда пользователь нажимает, устанавливает критерии и нажимает на поиск. У меня есть компонент, который отправляет действие каждый раз, когда пользователь заполняет форму и нажимает кнопку «поиск». Маршрут обрабатывает действие в

//rounte.js 
action: { 
    searchClicked: { 
    var newdata = this.get('store').query('item', {...}); 
    this.set('model', newdata); //<<<< this is not working!! 
    } 
} 

Если им это делать, будут приближаться исключения. Также я боюсь, что это не сработает, даже если нет исключений, потому что шаблон не будет обновлять сам, я думаю.

Однако: Как я могу установить (/ полностью обменять) модель на действия в маршруте?

ответ

3

я мог придумать несколько способов:

1) использовать параметры запроса и силы маршрут, чтобы обновить модель, когда критерии изменения. Подробнее можно найти здесь: https://guides.emberjs.com/v2.3.0/routing/query-params/, специально Opting into a full transition. Но это может не соответствовать вашей потребности, если у вас может быть несколько критериев.

2) Установите модель на контроллер не по маршруту.

actions: { 
    searchClicked() { 
    let promise = this.get('store').query('item', {...}); 
    promise.then(newData => { 
     this.controller.set('model', newdata); 
    });  
    } 
} 

но с контроллерами, уходящими в будущую итерацию ember, я не знаю, является ли это лучшим решением.

+0

обе - ** хорошо ** способ! Я лично использую параметры запроса, и это действительно весело, но просто установка 'model' на контроллере - неплохая идея! Сделайте это и получайте удовольствие! Вероятно, эти контроллеры пойдут в путь, и это не повод избежать их в настоящий момент! Также вы можете перейти в новую модель ... – Lux

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