我是骨干的新人.我在Backbone.js中看到,事件绑定:
var PersonView = Backbone.View.extend({ .... events : { "click button.btnSay" : "saySomething" },saySomething : function(){ .... } ... });
…不需要button.btnSay在调用时就存在,就像Jquery中的“delegate”一样.
现在,问题是,我们可以将html页面中的任何按钮更改为.btnSay(由Firebug等).他们最终得到听众.我们该如何预防呢?
解决方法@H_404_10@
它与委托不同,它使用delegate(除非事件没有选择器). Backbone中的事件绑定如下所示:
if (selector === '') {
$(this.el).bind(eventName,method);
} else {
$(this.el).delegate(selector,eventName,method);
}
所以它在视图的元素上使用delegate.这至少将事件限制在视图内的元素.
您无法阻止人们在调试器中将元素和事件混淆在一起.他们可以更改HTML,CSS,甚至编辑JavaScript,因此您无法阻止他们在您的页面上造成麻烦.您可以阻止他们在您的服务器上混乱,只是不要信任任何Backbone发送到您的服务器,并验证一切与验证外部世界其他任何东西一样.
基本上,不要浪费你的时间,因为搞错了你的HTML /事件/ JavaScript,一些人用砖头砸碎了自己的脸.让他们自己伤害自己想要的一切.但是通过不信任外部任何东西来保护您的服务器(并且您的服务器甚至不应该信任自己).
if (selector === '') { $(this.el).bind(eventName,method); } else { $(this.el).delegate(selector,eventName,method); }
所以它在视图的元素上使用delegate.这至少将事件限制在视图内的元素.
您无法阻止人们在调试器中将元素和事件混淆在一起.他们可以更改HTML,CSS,甚至编辑JavaScript,因此您无法阻止他们在您的页面上造成麻烦.您可以阻止他们在您的服务器上混乱,只是不要信任任何Backbone发送到您的服务器,并验证一切与验证外部世界其他任何东西一样.
基本上,不要浪费你的时间,因为搞错了你的HTML /事件/ JavaScript,一些人用砖头砸碎了自己的脸.让他们自己伤害自己想要的一切.但是通过不信任外部任何东西来保护您的服务器(并且您的服务器甚至不应该信任自己).