2015-08-25 3 views
3

Я ищу, чтобы сделать мои метеоритные подписки динамическими/реактивными. Прямо сейчас, у меня есть страница, которая подписывается в коллекции шаблонов на основе шаблона ID, который оценочный к нему:Как я могу сделать подписку Meteor динамичной?

Meteor.subscribe (шаблоны, templateId)

На той же странице, у меня есть выпадающий список имен шаблонов и идентификаторы:

<p><label>Select Template</label></p> 
    <select id="templateSelect" name="templateSelect"> 
     <option disabled selected> Select Template </option> 
     {{#each orderTemplates}} 
      <option value="{{this._id}}">{{this.templateName}}</option> 
     {{/each}} 
    </select> 

Я хочу, чтобы подписка переменной templateId равного значения опции шаблона, которые я выбираю. У кого-нибудь есть идеи? Я действительно не уверен, с чего начать с этого ...

Спасибо!

+0

Вы хотите глобальный или подписки шаблон уровня? То есть должна ли подписка останавливаться после перехода на новый маршрут/шаблон? –

+0

привет - я хочу, чтобы это была подписка на уровне шаблона. –

ответ

4

Если вы хотите подписку шаблон, вы должны следовать этой стратегии:

  1. Создайте реактивную переменную, привязанную к вашему шаблону.
  2. Обновление (1) в вашем обработчике событий.
  3. Используйте template subscription в сочетании с template autorun - это обеспечит вам только одну выдающуюся подписку и автоматически очистит подписки при уничтожении шаблона.
Template.myTemplate.events({ 
    'change #templateSelect': function (event, template) { 
    // extract the value/id from the selected option 
    var value = $(event.target).val(); 

    // update the templateId - whis will cause the autorun to execute again 
    template.templateId.set(value); 
    } 
}); 


Template.myTemplate.onCreated(function() { 
    var self = this; 

    // store the currently selected template id as a reactive variable 
    var templateId = new ReactiveVar; 

    // this will rerun whenever templateId changes 
    this.autorun(function() { 
    // Subscribe for the current templateId (only if one is selected). Note this 
    // will automatically clean up any previously subscribed data and it will 
    // also stop all subscriptions when this template is destroyed. 
    if (templateId.get()) 
     self.subscribe('orderTemplateShow', templateId.get()); 
    }); 
}); 

Рекомендуемая литература:

  1. Scoped Reactivity
  2. Template Subscriptions
  3. Changing Templates and Subscriptions with Select dropdown
+0

Ты настоящий спасатель! –

2

Чтобы получить идентификатор выбранного параметра используйте селектор JQuery, чтобы выбрать по идентификатору затем выберите .val() этого меню:

var templateId = $('select[id="templateSelect"]').val(); 
Meteor.subscribe('templates', templateId); 
+0

gotcha, я не понимал, что могу использовать метод подписки в вспомогательном файле шаблона. –

+0

Я бы рекомендовал поместить его в обработчик событий шаблона, а не помощник в этом случае, так как вы реагируете на выбор меню. –

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