2014-01-06 8 views
1

В ember js мне было интересно, что такое обычный способ использования параметров маршрута, который обычно доступен в крючке модели?Обычное использование параметров маршрута в Ember

Иногда я нахожу, что мне нужен доступ к одному из параметров внутри контроллера; скажем, сделать запрос ajax из-за действия или чего-то еще. Теперь, как правило, вы возвращаете модель в крючке модели, в которой обычно есть идентификатор. Но у меня есть случаи, когда мне не нужна модель, просто нужно значение. Я могу вернуть объект или значение в качестве «модели» в этом случае, но это кажется странным. Не существует способа просто получить доступ к параметрам непосредственно в контроллере вместо того, чтобы передавать значение вокруг? Можете ли вы получить доступ к данным текущего маршрута с контроллера?

Другое дело; У меня есть маршрут, который требует двух динамических сегментов. Поэтому я создаю ресурс с маршрутом. Теперь на моем маршруте мне нужен доступ к обоим этим параметрам. Должен ли я передавать их через крючок модели? А затем в субконтроллере я должен использовать «потребности» для доступа к содержимому родительского контроллера? Кажется, что это слишком много обходного пути, и это делает вещи действительно грязными и неясными.

Чтобы добавить к этому ... Если передать некоторые данные на маршрут через что-то вроде transitionToRoute, он пропускает метод модели на маршруте , Но тогда у вас больше нет доступа к параметрам маршрута. Ожидается ли, что вы вызываете метод сериализации на модели, которую у вас есть в setupController, чтобы выяснить ваши параметры?

ответ

1

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

Ссылка на тему можно найти здесь:

https://github.com/emberjs/ember.js/pull/3182

В общий способ сделать это так:

App.Router.map(function() { 
    this.resource('posts', {queryParams: ['sort', 'direction']}, function() { 
    this.resource('post', {path: "/:id", queryParams: ['showDetails']}); 
    }); 
}); 

App.IndexRoute = Ember.Route.extend({ 
    beforeModel:  function(transition, queryParams) {}, 
    model:   function(params, transition, queryParams) {}, 
    afterModel:  function(resolvedModel, transition, queryParams) {}, 
    setupController: function(controller, context, queryParams) {}, 
    renderTemplate: function(controller, context, queryParams) {} 
}); 

/// transitionTo now will accept a final argument, which must be an object with the key queryParams. 

this.transitionTo('post', object, {queryParams: {showDetails: true}}); 
this.transitionTo('posts', {queryParams: {sort: 'title'}}); 
this.transitionTo({queryParams: {direction: 'asc'}}); 

/// You can also use add query params to URL transitions as you would expect: 

this.transitionTo("/posts/1?sort=date&showDetails=true"); 
+1

Это примерно queryParams, но я говорю о params, как вы прошли в модельный метод в IndexRoute. Может быть, это недоразумение с моей стороны, но как это касается моих вопросов? Мои вопросы основаны на динамических сегментах – Arch

+1

Возможно, это может помочь. https://github.com/emberjs/ember.js/issues/1997 – borisrorsvort

+0

Прохладный, я посмотрю – Arch

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