2015-07-06 2 views
0

У меня возникла проблема вставить шаблон после и не перед узлом. Например:Meteor Blaze.renderWithData Как вставить? Возможно ли это?

//Html looks like this 
<div class="questions"> 
<div class="question"></div> 
<div class="question"></div> 
<div class="question"></div> 
</div> 

<template name="question"> 
    <div class="question"></div> 
</div> 
<template name="questionExtraInfo"> 
    <div class="extra"></div> 
</template> 

Я пытаюсь получить следующее:

<div class="questions"> 
<div class="question"></div> 
<div class="extra"></div> 
<div class="question"></div> 
<div class="question"></div> 
</div> 

Вызов полыхать визуализации внутри событие Вопрос

Template.question.events({ 
    'click .more-details': function() { 
    var instance = Template.instance(); 
    Blaze.renderWithData(Template.questionExtraInfo, {}, document.querySelector('.questions'), instance.find('.question'))); 
}); 

Я могу только выяснить, как сделать его до или внутри как насчет после?

<div class="extra"></div> 
<div class="question"></div> 

<div class="question"><div class="extra"></div></div> 
+0

только что добавил пустой div, чтобы держать его там, где нужно, если кто-то сталкивается с такой же проблемой. –

ответ

0

Я думаю, что лучше было бы воспользоваться реактивности:

Изменить questions шаблон:

<template name="question"> 
    <div class="question"></div> 
    {{# if shouldIncludeExtra }} 
    {{> questionExtraInfo }} 
    {{/if}} 
</template> 

Приведенный выше шаблон должен быть внутри каждого цикла.

Тогда в ваших JS-то вроде:

Template.question.helpers({ 
    'shouldIncludeExtra': function() { 

    // replace 'n' with the actual index. I think `this.index` is 
    // provided within #each blocks, or you can use the new `@each` helper. 
    var index = n; 

    return Session.get('shouldIncludeExtra' + index); 

    } 
}); 

Затем, в вашем случае нажмите кнопку, вы установите сессионный вар на основе индекса true:

Template.questions.events({ 
    'click .question': function(e, tpl) { 

    var question = e.currentTarget; 

    // You can probably come up with something better here.. 
    var index = $(question).parent().find('> .question').index(question); 

    Session.set('shouldIncludeExtra' + index, true); 
    } 
}); 

Из-за реактивности, вы бы см. вставки сразу, когда вы запускаете событие клика.

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

+0

Спасибо за время ответа. Да, всегда сессия для спасения :). У какого нового указателя '@ each' helper есть ли у вас дополнительная информация? У Meteor есть проблема, когда вы не можете получить индекс из массива. Но это не проблема, я могу использовать _id. Я все еще хочу получить ответ для «Blaze.render», это кажется огромным ограничением, и я хотел, чтобы метеор мог быть более гибким с параметрами для него. Или, возможно, так, как я просто не думал об этом. –

+0

О да, это просто вышло, проверьте это: https://github.com/meteor/meteor/pull/3560 Я надеюсь, что вы можете передать это как аргумент помощнику или, скорее всего, он уже доступен в контекст данных. –

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