2014-06-19 2 views
0

В моем приложении мне нужно отобразить неупорядоченный список, созданный из шаблона метеор, и каждый элемент списка должен иметь возможность отображать подсписку, отображенную из одного и того же шаблона, если щелкнуть, и новые добавленные списки должны будут иметь возможность дополнительно показать новые подсписки.Meteor 0.8 Blaze: добавление реактивного шаблона в DOM?

Оригинальный список, и подсписки представлены в Монго, как это:

{ person:"Tom", friendIds: [ id1, id2, id3] } 

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

Я пытался использовать

UI.insert(UI.renderWithData(...)) 

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

Каков рекомендуемый нами подход к решению этой проблемы в 0,8 и более? Я планирую углубиться в механизм Deps, чтобы попытаться заставить его работать, но я волнуюсь, если я откажусь от своего собственного решения, я буду отклоняться от пути Метеор.

+0

императив DOM манипуляции, как правило, неправильный подход в Meteor. Вы должны сделать эту работу только с помощью декларативных шаблонов. В сеансе вы можете сохранить, какие под-списки будут расширены, а затем в шаблоне для элемента списка решить, показывать или нет его под-список в зависимости от переменной сеанса. – user3374348

ответ

0

Я предполагаю, что это сообщение https://groups.google.com/forum/#!topic/meteor-talk/zUG9EVo3rpQ.

Я не вижу никакой причины использовать здесь API UI.insert. Вы просто должны это делать в обычном шаблоне:

{{#each list}} 
    <span>Name: {{person}}</span> 

    {{#if expanded}} 
    {{#each friendIds}} 
     {{> someOtherTemplate}} 
    {{/each}} 
    {{else}} 
    <a class="expand">Show friends</a> 
    {{/if}} 
{{/each}} 

С помощникам, как это:

Template.foo.expanded = function() { return Session.equals("openedList", this._id); } 

Template.foo.events({ 
    "click .expand": function(e) { 
    e.preventDefault(); 
    Session.set("openedList", this._id); 
    }; 
}); 
+0

Спасибо, я попробую! Вопрос Dumb Meteor: вместо этого вы могли бы добавить функцию Template.foo.expanded с помощью Template.foo.helpers()? Я не понимаю разницу между добавлением помощников и добавлением функций непосредственно к объекту шаблона. – user800268

+0

@ пользователь800268 Да, такой же предмет. –

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