Связанные события теряются во вложенном шаблоне (?) - PullRequest
0 голосов
/ 09 января 2011

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

Я создал виджет на основе этого шаблона:

<!--  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(...)) кнопка A и кнопка 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) потеряна!

Это правильное поведение или я делаю что-то совершенно не так?

1 Ответ

0 голосов
/ 09 января 2011

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

...