2014-06-25 3 views
3

В приложении я использую последние версии Canary для Ember и Ember Data. У меня есть следующий маршрутизатор:Query-params-новые вложенные маршруты странная ошибка

this.resource('articles', {path: '/articles'}, function() { 
    this.resource('article', {path: '/:article_id'}); 
}); 

В ArticlesController уточняют некоторые queryParams:

queryParams: ['category', 'search'], 
category: '1', // defaults to 1 
searchTerm: "",  

В моем ArticlesRoute указует модель обновление и модель:

queryParams: { 
    category: { 
     refreshModel: true 
    } 
}, 

model: function(params) { 
    // here I do use the params to return articles based on category and/or searchTerm 
} 

Пока все хорошо, весь код выше работает отлично. Однако, когда я делаю this.transitionTo('article', articleObject) или this.transitionToRoute('article', articleObject) в моем приложении я получаю следующее сообщение об ошибке:

Error: You didn't provide enough string/numeric parameters to satisfy all of the dynamic segments for route article 
    at Object.__exports__.default.subclass.createParamHandlerInfo (http://localhost:8000/vendor/ember/index.js:44242:21) 
    at Object.__exports__.default.subclass.applyToHandlers (http://localhost:8000/vendor/ember/index.js:44121:37) 
    at Object.__exports__.default.subclass.applyToState (http://localhost:8000/vendor/ember/index.js:44088:21) 
    at Object.Router.transitionByIntent (http://localhost:8000/vendor/ember/index.js:43312:33) 
    at Object.Router.refresh (http://localhost:8000/vendor/ember/index.js:43459:21) 
    at EmberObject.extend.refresh (http://localhost:8000/vendor/ember/index.js:22616:35) 
    at EmberObject.extend._actions.queryParamsDidChange (http://localhost:8000/vendor/ember/index.js:22328:22) 
    at Object.triggerEvent (http://localhost:8000/vendor/ember/index.js:24563:38) 
    at trigger (http://localhost:8000/vendor/ember/index.js:44812:16) 
    at fireQueryParamDidChange (http://localhost:8000/vendor/ember/index.js:43612:9) index.js:14220 
Uncaught Error: Assertion Failed: Error: You didn't provide enough string/numeric parameters to satisfy all of the dynamic segments for route article index.js:3658 

Эта странная ошибка происходит только тогда, когда я первый нажал Категорию так queryParam category изменяется, а затем огонь transitionTo к статья.

Я попытался использовать инструкцию debugger;, чтобы получить источник ошибки. Однако, похоже, это событие вызывает эту ошибку. При поиске исходного кода я обнаружил, что ошибка исходит из строки 44242 ember.js.

Кто-нибудь знает, почему эта ошибка произошла после того, как я перешел на новый запрос-params non-?

Edit: сейчас в Github тоже: https://github.com/emberjs/ember.js/issues/5070 (комментарий на Github) JSBin: http://emberjs.jsbin.com/yiquyupa

ответ

3

Я столкнулся с почти той же проблемой в afterModel обратного вызова, где родительский маршрут/контроллер имеет queryParams.

Я обнаружил, что если вы просто передать queryParams от перехода аргумента (а не аргумент queryParams, который является нулевым/неопределенным) в Route.transitionTo/Route.replaceWith то переход завершается.

Пример:

afterModel: function(model, transition, queryParams) { 
    // FIXME: unresolved Ember issue https://github.com/emberjs/ember.js/issues/5070 
    this.replaceWith('another.route', model, { queryParams: transition.queryParams}); 
} 

Я не знаю, почему это происходит, но queryParams все еще относительно новая функция и все еще имеет некоторые острые углы.

+1

Привет, спасибо за ваш комментарий о той же проблеме! Он до сих пор не разрешен. Возможно, вы можете настроить jsbin с вашей проблемой и добавить его к обсуждению здесь: https://github.com/emberjs/ember.js/issues/5070 – DelphiLynx

+0

проблема в том, что некоторые маршруты имеют более одной связанной модели и сложно программно перейти к одному из переадресации входа. У меня был довольно хороший успех, используя transitionTo ('/ url') вместо – runspired

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