Sto tentando di creare una vista Backbone.js basata su un modal bootstrap di Twitter, che utilizza la delega degli eventi automatici di Backbone tramite l'attributo events
della vista.Utilizzo di bootstrap-modal come vista Backbone.js
Purtroppo, bootstrap-modal sembra rompere delegazione evento di Backbone come si clona il codice HTML vista prima di visualizzare il modal:
that.$element
.appendTo(document.body)
.show()
mio punto di vista:
App.Views.ProjectsNav ||= {}
class App.Views.ProjectsNav.NewProjectView extends Backbone.View
events: {
'click .save': 'save',
'shown': 'shown'
}
save: (e) ->
...
false
shown:() ->
App.Helpers.Forms.setFocus($(@el), true)
false
render:() ->
$(@el).html(ich.nav_edit_project_template(@model.toJSON()))
@$('.modal').modal({'show': true, 'keyboard': true, 'backdrop': true})
@
La corrispondente (baffi) template HTML :
<div class="modal hide" style="display: none; ">
<div class="modal-header">
<a href="#" class="close">×</a>
<h3>New Project</h3>
</div>
<div class="modal-body form-stacked">
<label for="name">Name</label> <input type="text" name="name" value="{{name}}"/><input type="hidden" name="lock_version" value="{{lock_version}}"/>
</div>
<div class="modal-footer">
<a href="javascript:void(0)" class="save btn primary">Create</a>
<a href="javascript:void(0)" class="cancel btn secondary">Cancel</a>
</div>
</div>
né save
né shown
vengono chiamati quando vengono attivati i rispettivi eventi.
Qualche idea?
C'è un callback "aperto" di qualche tipo che è possibile utilizzare per riempire il modal con HTML? In pratica bypassare la clonazione (o almeno la parte della clonazione che sta rovinando 'delegate'). –
Sì, cf. http://twitter.github.com/bootstrap/1.4.0/bootstrap-modal.js. Sfortunatamente, l'evento show viene chiamato prima del clone (e non ricevo l'evento mostrato a causa del problema originale). –
Che dire dell'evento 'shown'? "Questo evento viene attivato quando la modal è stata resa visibile all'utente (attenderà il completamento delle transizioni di CSS)." –