我对backbone还比较新,所以我可能会在做这个时违反backbone的本质。欢迎提出建议:
我已经制作了一种墙壁式的系统。因此有一个表单可以用来在墙上发布更新。
每个更新都可以有评论。一次最多显示10个更新。因此就有10个评论表单。所以我有一个视图:
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;
}
});
现在我将创建一个实例,如下所示:
commentFormView= new CommentForm({el:$(".comment-form form")});
请注意,.comment-form 是一个 div。有多个此类元素。事件处理程序可以正常附加到所有评论表单上。但是,当我使用
$this=$(this.el);
时,它总是指向第一个评论表单。我该如何解决这个问题。$(this.el) 应该引用触发事件的当前评论表单实例,而不是第一个实例。
evt
参数中并没有包含srcElement
,但我可以使用evt.target
。结果发现,一些浏览器支持srcElement
,而另一些则支持originalElement
,所以jQuery很好地解决了这个问题,并将其返回给你的target
。顺便说一下。 - George Mandis