2015-03-14 2 views
0

Это ясно, как предоставлять данные маршрута конкретной, т.е. за счет использования контроллера:Iron Router: Как обеспечить те же данные нескольких маршрутов

PostController = RouteController.extend({ 
    layoutTemplate: 'PostLayout', 
    template: 'Post', 
    waitOn: function() { return Meteor.subscribe('post', this.params._id); }, 
    data: function() { return Posts.findOne({_id: this.params._id}) }, 
    action: function() { 
    this.render(); 
    } 
}); 

Но как обеспечить данные для приложения в целом ? В случае, когда каждый маршрут должен быть подписан на один и тот же подмножество информации, чтобы паб/суб не нужно переделывать при каждом изменении маршрута. Благодаря!

+0

Возможно, вас заинтересует [менеджер подписки] (https://github.com/meteorhacks/subs-manager). –

ответ

1

Это звучит так, как будто вы ищете полностью общую схему публикации/подписки, так что вам не нужно определять комбинацию опций/для каждого заданного вами маршрута или контроллера маршрута. В этом случае, вы можете просто опубликовать данный набор данных на сервере так:

Meteor.publish('someData', function() { 
     return SomeDataCollection.find({}); 
    }); 

и подписаться на этот набор данных на клиенте так:

Meteor.subscribe('someData'); 

С этой публикации/, вы получите доступ к данным, предоставленным на всех маршрутах. Вам просто нужно убедиться, что вы проверяете наличие несуществующих данных в вашем коде для обработки первой загрузки любого заданного шаблона, когда данные еще не были загружены на клиенте. Таким образом, вам никогда не нужно было бы определять параметры waitOn и data для любого контроллера маршрута или маршрута.

Если вы хотите использовать Iron Router иначе, чем через контроллеры маршрутов, у вас также есть возможность ждать по одной/многим подпискам по всему миру, используя функцию Router.configure({});. Чтобы использовать приведенный выше пример:

Router.configure({ 
     waitOn: function() { 
      return Meteor.subscribe('someData'); 
     } 
    }); 

Для получения дополнительной информации об этой опции маршрута и все другие варианты, которые вы имеете в наличии на глобальном уровне, проверьте this аут.

+0

Спасибо! Первый вариант работал лучше для меня. Последний вариант не работал хорошо, потому что каждый маршрут должен быть привязан к данным, специфичным для маршрута, в дополнение к общей подписке, что вызвало некоторые конфликты в Iron Router. –

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