Sono piuttosto nuovo alla dorsale, quindi è possibile che io stia violando l'essenza stessa della dorsale nel farlo. I suggerimenti sono apprezzati:Backbone.js collega la vista a più elementi
Ho realizzato un sistema di tipo di muro. Quindi c'è un modulo che può essere usato per pubblicare aggiornamenti sul muro.
Ogni aggiornamento può contenere commenti su di essi. Sto mostrando 10 aggiornamenti alla volta. Quindi ci sono 10 moduli di commento. Così ho vista:
CommentForm=Backbone.View.extend({
initialize:function(messageView){
},
events:{
"submit":"postcomment"
},
showMessage:function(data){
if(data.success)
type="success";
else
type="error";
message=data.error?data.error:"Update posted successfully";
$messageContainer=$this.prev();
console.log($this);
var html="<div class='alert alert-"+type+"'>"+message+"</div>";
$($messageContainer).html(html);
},
postcomment:function(){
$this=$(this.el);
$.post(baseUrl+"/portal/post-comment",$this.serialize(),this.showMessage,"json");
return false;
}
});
Ora creare un'istanza ad esso come segue:
commentFormView= new CommentForm({el:$(".comment-form form")});
noti che .comment-forma è un div. Ci sono molti di questi elementi. Il gestore eventi viene collegato a tutti i moduli di commento correttamente. Ma quando uso $this=$(this.el);
si riferisce sempre al primo modulo di commento. Come lo risolvo. $ (this.el) dovrebbe fare riferimento all'istanza corrente del modulo di commento, dove l'evento è stato attivato e non il primo
Quando ho provato questo il 'evt' parametro non conteneva srcElement, ma avevo circa usare 'evt.target'. Si scopre che alcuni browser supportano 'srcElement' e altri' originalElement', così jQuery capisce bene quale è e cosa restituiscelo in 'target'. FWIW. –