backbone 2个model,2个view的事件触发问题? 本帖最后由 WDYDXF 于 2014-01-14 11:00:21 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 backbone忘记得差不多了。backbone有中文社区的,可以去那问一下。 因为你为body下的.btnClick元素绑定了2次onClick事件。jQuery里绑定几次就执行几次,所以你的回调执行了2次。 您好,那么view里的绑定事件,正确的写法应该怎么写? viewA的时候new了View,对body元素绑了一次"click .btnClick": "onClick";viewB的时候又new了一次View,对body元素又绑了一次"click .btnClick": "onClick";所以绑定了2次。jQuery里可以对同一个元素绑定多次click事件。 <script>var CustomView = Backbone.View.extend({ el: $('body'), events: { "click .btnClick": "onClick" }, initialize: function () { this.render(); }, render: function () { this.$el.append("<div class='btnClick' style='background-color:red; width:100px;height:100px'></div>"); }, onClick: function () { console.log(this.cid+'onClick'); }});var CustomModel = Backbone.Model.extend({ defaults: { name: 'test' }});var modelA = new CustomModel();var modelB = new CustomModel();var viewA = new CustomView({ model: modelA });var viewB = new CustomView({ model: modelB });</script>顺着你的思路<script>var CustomView = Backbone.View.extend({ el: $('body'), events: { "click .btnClick": "onClick" }, initialize: function () { this.render(); }, render: function () { this.$el.append("<div class='btnClick' style='background-color:red; width:100px;height:100px'></div>"); }, onClick: function () { console.log(this.cid+'onClick'); }});var CustomModel = Backbone.Model.extend({ defaults: { name: 'test' }});var modelA = new CustomModel();var modelB = new CustomModel();var viewA = new CustomView({ model: modelA });var viewB = new CustomView({ model: modelB });</script> 啊,第二个发错了var CustomView = Backbone.View.extend({ el: $('body'), events: function(){ var key = 'click #'+this.cid; var obj={}; obj[key]='onClick'; return obj; }, initialize: function () { this.render(); }, render: function () { this.$el.append("<div class='btnClick' id='" +this.cid +"' style='background-color:red; width:100px;height:100px'></div>"); }, onClick: function () { console.log(this.cid+'onClick'); }});var CustomModel = Backbone.Model.extend({ defaults: { name: 'test' }});var modelA = new CustomModel();var modelB = new CustomModel();var viewA = new CustomView({ model: modelA });var viewB = new CustomView({ model: modelB }); 如果我的一个model对应一个view的,我叫做itemview ,我就不会用el赋值,用tagName:‘div’,使他们独立起来- - jquery如何写类似a:hover这种的css 关于onmousewheel的问题.好纠结啊 如何給新打開的頁面添加樣式啊 这是firefox输入框bug吗? 请问如何解决?(内详) 谁帮我把这段JS代码封装成JS文件呀,万分感谢 ~~~~_f 如何实现http://iask.sina.com.cn/b/8938481.html里的效果, 关于JavaScript对ASP动态对象的控制。 请问如何在页面中动态添加一个DIV 标点符号自动断行问题 angularjs 内容超出三行隐藏并显示省略号 怎么搞呀急呀(浏览器兼容属性) 关于弹窗问题 JS中插入iframe 自适应高度
viewB的时候又new了一次View,对body元素又绑了一次"click .btnClick": "onClick";
所以绑定了2次。
jQuery里可以对同一个元素绑定多次click事件。
el: $('body'),
events: {
"click .btnClick": "onClick"
},
initialize: function () {
this.render();
},
render: function () {
this.$el.append("<div class='btnClick' style='background-color:red; width:100px;height:100px'></div>");
},
onClick: function () {
console.log(this.cid+'onClick');
}
});var CustomModel = Backbone.Model.extend({
defaults: {
name: 'test'
}
});var modelA = new CustomModel();
var modelB = new CustomModel();var viewA = new CustomView({ model: modelA });
var viewB = new CustomView({ model: modelB });</script>
顺着你的思路
<script>var CustomView = Backbone.View.extend({
el: $('body'),
events: {
"click .btnClick": "onClick"
},
initialize: function () {
this.render();
},
render: function () {
this.$el.append("<div class='btnClick' style='background-color:red; width:100px;height:100px'></div>");
},
onClick: function () {
console.log(this.cid+'onClick');
}
});var CustomModel = Backbone.Model.extend({
defaults: {
name: 'test'
}
});var modelA = new CustomModel();
var modelB = new CustomModel();var viewA = new CustomView({ model: modelA });
var viewB = new CustomView({ model: modelB });</script>
var CustomView = Backbone.View.extend({
el: $('body'),
events: function(){
var key = 'click #'+this.cid;
var obj={};
obj[key]='onClick';
return obj;
},
initialize: function () {
this.render();
},
render: function () {
this.$el.append("<div class='btnClick' id='" +this.cid +"' style='background-color:red; width:100px;height:100px'></div>");
},
onClick: function () {
console.log(this.cid+'onClick');
}
});var CustomModel = Backbone.Model.extend({
defaults: {
name: 'test'
}
});var modelA = new CustomModel();
var modelB = new CustomModel();var viewA = new CustomView({ model: modelA });
var viewB = new CustomView({ model: modelB });