Meteor: доступ к данным контекста (шаблона) в обработанном обратном вызове

У меня есть шаблон с yield разделом:

  {{>yield}}

В yield я показываю форму с полями, заполненными данными категории, редактируемой в данный момент:

this.route('editCategory', {
    path: '/panel/category/:_id/edit',
    layoutTemplate: 'panelTemplate',
    template: 'editCategoryTemplate',
    data: function(){
        return Categories.findOne(this.params._id);
    },
});

Есть поле выбора (где я выбираю родительскую категорию) с парой опций. Выбираю ранее выбранный вариант со скриптом:

Template.editCategoryTemplate.rendered = function(){
    $('#categoryParent option[value="'+ this.data.parent +'"]').prop('selected', true);
};

И все работает нормально, но после перезагрузки страницы возникает ошибка:

Exception from Deps afterFlush function: this.data is null

Любая помощь будет оценена по достоинству.


person lukaszkups    schedule 02.09.2014    source источник
comment
Возможно, эта страница может помочь meteorpedia.com/read/   -  person Adlen Afane    schedule 03.09.2014
comment
Я предполагаю, что функция обратного вызова для обработанного объекта вызывается при отображении экземпляра шаблона, но, возможно, данные еще не получены, поэтому parent недоступен.   -  person Adlen Afane    schedule 03.09.2014
comment
У меня есть похожее предположение - но как это решить? Как заставить Meteor ждать / получать эти данные? (он уже сохранен в коллекции документов Категории)   -  person lukaszkups    schedule 03.09.2014


Ответы (1)


Хорошая идея поставить охранников:

Вместо использования this.data.parent напишите:

Deps.autorun(function(){
  var parentData = this.data && this.data.parent;
  if(parentData){
    $('#categoryParent option[value="'+ parentData +'"]').prop('selected', true);
  }
})
person Kuba Wyrobek    schedule 02.09.2014