2016-07-12 7 views
0

Я хочу, чтобы моя модель перезагрузилась при изменении параметров queryParams. Изменение запросаParams отражается в URL-адресе, но перезагрузка модели не происходит. Я следил за инструкциями ember.js (https://guides.emberjs.com/v2.6.0/routing/query-params/) о переходе на полный переход. Я мои queryParams заявили в моем контроллереМодель данных ember не перезагружается даже после того, как запрос изменился.

//controllers/service/service.js 
    import Ember from 'ember'; 
    export default Ember.Controller.extend({ 
     queryParams:['showFriends'] 
    }); 

    //routes/service/service.js 
    model(params){ 
     return this.store.query('service', params); 
    }, 
    actions:{ 
     updatePage(params){ 
     this.transitionTo('service',{queryParams:{showFriends:params}}); 
    }, 
    }, 
    queryParams:{ 
    showFriends:{ 
     refreshModel:true 
    } 
    }, 

Я звоню updatePage от компонента, который проходит Params истинным или ложным, основываясь на выборе флажка. Компонент вызывается из application.hbs файла, как показано ниже

{{test-component model=model updatePage="updatePage"}} 

Если удалить refreshModel: истинное от моего маршрута, я вижу URL обновляется, но моя модель не перегрузочные (как и следовало ожидать в соответствии с Docs).

Поскольку я делаю полный на переход я добавил строку refreshModel: истинный, который дает мне ошибку

ember.debug.js:32096 TypeError: this.refresh is not a function 
at Class.queryParamsDidChange (ember.debug.js:26286) 
at Object.triggerEvent (ember.debug.js:28580) 
at Object.trigger (ember.debug.js:53473) 
at fireQueryParamDidChange (ember.debug.js:52255) 
at Object.queryParamsTransition (ember.debug.js:51983) 
at Object.getTransitionByIntent (ember.debug.js:51913) 
at Object.transitionByIntent (ember.debug.js:52018) 
at doTransition (ember.debug.js:52590) 
at Object.transitionTo (ember.debug.js:52087) 
at Class._doTransition (ember.debug.js:28291) 

я потратил более 2-х дней по этому вопросу, но не имеет смысла. Любой, кто столкнулся с подобной проблемой или имел какую-либо идею о том, как решить эту проблему, будет большой помощью для меня. Заранее спасибо

+0

вы можете попробовать this.transitionTo ('service.service', {queryParams: {showFriends: params}}); .. покажите мне свой код маршрутизатора, это поможет решить проблему для отладки – kumkanillam

ответ

1

Положить queryParams:{ showFriends:{ refreshModel:true } } в соответствующий маршрут.

Маршруты отвечает за выборку моделей, поэтому она должна быть там

+0

Эй, @ Ebrahim, я чувствую, что код маршрутизатора и queryParams находится в сервисном маршрутизаторе в приведенном выше примере, который находится на соответствующем маршруте. Не могли бы вы сообщить мне, где я ошибаюсь. –

+0

@ nag9329 Да, я видел, как ты туда поместился. Но исключение ясно. Он хочет называть 'refresh' на маршруте, но не может его найти. Так ты не возражаешь? –

+0

Я предоставляю трюк на https://ember-twiddle.com/c0b5c3cd910e22a75551bb7b451c3603. Пожалуйста, проверьте его –

1

Отвечая на мой собственный вопрос, подумал, что если кто-то сталкивается с той же проблемой. Решение прост, но вы знаете, что найти подходящее место - трудная задача.

У меня есть услуга, введенная во все мои маршруты, и имя службы «обновляется». Когда я вызываю refreshModel: true на маршруте, поскольку все мы знаем, что ember в backend вызывает this.refresh().

Но, здесь, в моем случае, служба с именем обновления уже была введена в приложение, ember не вызывает этот метод.refresh() маршрута вместо вызова введенной службы, которая, очевидно, не является методом.

Итак, это вызывает у меня ошибку this.refresh - это не функция. Эмбер бы дал ошибку более конкретно, но опять же трудно для любого ожидать такой сценарий. В любом случае, спасибо всем, кто дал решения, которые направили меня на правильный путь.

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

  • Нет связанных вопросов^_^