2014-11-05 2 views
1

Я пытаюсь получить доступ к элементу 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.

+0

Вы имели в виду 'Template.instance(). $ ('. Empty'). Length> 0'? В javascript пустой массив не считается фальшивым значением. –

+0

Извините, я ошибся. Что я хочу проверить, это что-то вроде Template.instance(). $ ('Div'). HasClass ('empty') –

ответ

0

Я не уверен, правильно ли я интерпретировал вопрос, но если вы пытаетесь получить доступ к другому элементу DOM на странице, я смог использовать селектор jquery.

Например, если HTML из

<input type="textfield" id="initials" value=" "> 

и простой шаблон Метеор

<template name="demo"> 
    <input type="button" div id="s0"> 
</template> 

Я могу успешно открыть поле инициалов, когда кнопка s0 щелкают следующим

Template.demo.events({ 
    'click .cell': function(event, template) { 
     if ($('#initials').val().trim().length > 0) { 
      console.log($('#initials').val().trim() + ' - you clicked button '+$(event.target).attr('id')); 
    } 
}, 
Смежные вопросы