2011-01-09 2 views
0

У меня здесь проблема, и я не уверен, что это ошибка или моя глупость.Связанные события, потерянные во вложенном шаблоне (?)

Я построить виджет, на основе этого шаблона:

<!-- TEMPLATE A --> 
<div class="mplc-widget"> 
<div class="mplc-widget-available"> 
    <div class="mplc-widget-header">Available options</div> 
    <div class="mplc-widget-middle"><input></input></div> 
    <div class="mplc-widget-choices"> 
    <table> 
    {{each(i, choice) choices}} 
    <tr name="${choice[0]}"> 
     <td>${choice[1]}</td> 
    </tr> 
    {{/each}} 
    </table> 
    </div> 
</div> 
<div class="mplc-widget-selector"> 
    <div><button>A</button></div> 
    <div><button>B</button></div> 
</div> 
<div class="mplc-widget-chosen"> 
    <div class="mplc-widget-header">Selected options</div> 
    <div class="mplc-widget-choices"> 
    <table> 
    </table> 
    </div> 
</div> 
</div> 

после рендеринга этого шаблона (с widget = $.tmpl(...)) Кнопкой А и кнопка B связаны с click события, как это:

$('button', widget).bind('click', function(){alert('Hello world!');}) 

После этого возвращается widget. Функции, которые штукатурки предыдущего шаблона и связывают события, вызываются в другом шаблоне:

<!-- TEMPLATE B --> 
<div class='form'> 
<table> 
    {{each(i, field) fields}} 
    <tr> 
    {{if field.fieldname}} 
    <p> 
     <td {{if field.required}} class='field-required'{{/if}}> 
     ${field.label}:</td> <td>{{tmpl field.create()}} 
     {{if field.help_text}}<br/><span class='help_text'>${field.help_text}</span>{{/if}} 
     </td> 
    </p> 
    </tr> 
    {{/if}} 
    {{/each}} 
</table> 
</div> 

В этом шаблоне {{tmpl field.create()}} представляет собой функцию, которая делает и возвращает template A. Весь элемент отображается отлично при вставке в DOM, но функция привязки (устанавливается в create) теряется!

Является ли это правильным поведением или я делаю что-то совершенно неправильное?

ответ

0

Ну, я все еще не в состоянии применить описанную выше логику. Однако: я смог применить обходное решение, используя livequery. Он не идеален, но он работает.

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