Я пытаюсь получить доступ к элементу DOM, соответствующему конкретному экземпляру шаблона, который вызывает вспомогательную функцию. Когда я прочитал документацию Meteor, Template.instance() должен вернуть объект экземпляра шаблона, который вызвал помощника, и что-то вроде Template.instance(). $() Позволит мне захватить элементы DOM в этом экземпляре.Доступ к представлению DOM экземпляра шаблона, вызывающего помощника
Однако, следующий код (и аналогичные вариации) не работает для меня:
* HTML *
<template name="input_container">
<div class="small-12 medium-12 large-6 columns empty {{isActive}}"></div>
</template>
* JS *
Template.input_container.helpers({
isActive: function() {
if (Template.instance().$('.empty') && [some Session variable logic] {
return 'active';
}
}
});
Когда я сделать что-то вроде:
if (some Session logic) {
console.log(Template.instance())
}
я помощник правильно входа несколько версий:
Blaze.TemplateInstance {view: Blaze.View, data: 7, firstNode: div.small-12.medium-12.large-6.columns.empty.active-container, lastNode: div.small-12.medium-12.large-6.columns.empty.active-container, $: function…}
(с данными: значения происходит 1-12 соответственно, но в противном случае каждый, кажется, то же самое)
Как могу ли я получить от этого возможность использовать шаблонные методы, такие как шаблон. $ или template.find?
EDIT:
Хотя это и не идеальное решение, мне удалось обойти некоторые из этих проблем с помощью Template.currentData() и установки идентификатора на каждом экземпляре ввода.
Template.create_form.helpers(
# Create 12 input containers
inputContainer:() ->
[0..11]
И потом:
Template.input_container.helpers(
isActive:() ->
# Get which template instance we are working with, will return the number 0-11 that was used to create it
current = Template.currentData()
# Now I can do $(".input-container").eq(current) to grab the correct DOM element
)
Но, кажется, немного грязный, чтобы нужно использовать так много JQuery.
Вы имели в виду 'Template.instance(). $ ('. Empty'). Length> 0'? В javascript пустой массив не считается фальшивым значением. –
Извините, я ошибся. Что я хочу проверить, это что-то вроде Template.instance(). $ ('Div'). HasClass ('empty') –