Soy bastante nuevo en la columna vertebral, por lo que es posible que esté violando la esencia misma de la estructura al hacer esto. Las sugerencias son apreciadas:Backbone.js adjuntar vista a múltiples elementos
He hecho una especie de sistema de pared. Entonces, hay un formulario que se puede usar para publicar actualizaciones en la pared.
Cada actualización puede tener comentarios al respecto. Estoy mostrando 10 actualizaciones a la vez. Entonces hay 10 formularios de comentarios. Así que tienen una visión:
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;
}
});
Ahora puedo crear una instancia de la siguiente manera:
commentFormView= new CommentForm({el:$(".comment-form form")});
Tenga en cuenta que .comment-forma es un div. Hay múltiples tales elementos. El controlador de eventos se adjunta a todos los formularios de comentarios muy bien. Pero cuando uso $this=$(this.el);
, siempre se refiere al primer formulario de comentarios. Cómo puedo solucionar esto. $ (this.el) debe referirse a la instancia actual del formulario de comentarios, donde se desencadenó el evento y no el primero
Cuando probé esto el 'evt' parámetro no contenía srcElemento, pero estaba a punto para usar 'evt.target'. Resulta que algunos navegadores son compatibles con 'srcElement' y otros' originalElement', por lo que jQuery sabe muy bien cuál es cuál y se lo devuelve en 'target'. FWIW. –