Eventos enlazados perdidos en la plantilla anidada (?)

Estoy enfrentando un problema aquí y no estoy seguro de si es un error o mi estupidez.

Construí un widget, basado en esta plantilla:

<!--  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>

después de renderizar esta plantilla (con widget = $.tmpl(...)) el botón A y el botón B están vinculados a un click evento, como este:

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

Entonces widget es regresado. Las funciones que renderizan la plantilla anterior y vinculan los eventos, se llaman en otra plantilla:

<!-- 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>

En esta plantilla {{tmpl field.create()}} representa la función que se renderiza y devuelve template A. Todos los elementos se muestran bien cuando se insertan en el DOM, pero la función de enlace (establecida en create) ¡Esta perdido!

¿Es este el comportamiento correcto o estoy haciendo algo completamente mal?

preguntado el 09 de enero de 11 a las 12:01

1 Respuestas

Bueno, todavía no puedo aplicar la lógica explicada anteriormente. Sin embargo: pude aplicar una solución alternativa, usando livequery. No es ideal, pero funciona.

Respondido el 09 de enero de 11 a las 18:01

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.