2011-01-09 5 views
0

Ich stehe hier ein Problem und ich bin mir nicht sicher, ob es ein Fehler oder meine Dummheit ist.Gebundene Ereignisse verloren in verschachtelten Vorlage (?)

Ich habe ein Widget bauen, die auf dieser Vorlage basiert:

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

nach dieser Vorlage Rendering (mit widget = $.tmpl(...)) Taste A und Taste B sind gebunden an ein click Ereignis, wie folgt aus:

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

Dann wird widget zurückgegeben. Die Funktionen, die die vorherige Vorlage rendert und bindet die Ereignisse, in eine andere Vorlage wird genannt:

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

In dieser Vorlage {{tmpl field.create()}} stellt die Funktion, die macht und gibt template A. Alle Elemente werden beim Einfügen in das DOM ordnungsgemäß angezeigt, aber die Bindefunktion (in create festgelegt) geht verloren!

Ist das das richtige Verhalten oder mache ich etwas völlig falsch?

Antwort

0

Nun, ich bin immer noch nicht in der Lage, die oben erläuterte Logik anzuwenden. Allerdings: Ich konnte einen Workaround unter Verwendung von livequery anwenden. Es ist nicht ideal, aber es funktioniert.

Verwandte Themen