Backbone.js 在我多次查看新视图后,主干将多事件绑定到一个按钮 var UserView=Backbone.View.extend({ 初始化:函数(){ MData.blankHeader.data.topBar.title=''+this.options.userName+''; MData.blankHeader.data.topBar.btn1=''; MData.blankHeader.data.topBar.btn2=''; $('header').html(Mustache.to_html($('headerTpl').html(),MData.blankHeader)).append(“”); $('footer').html(Mustache.to_html($('footerTpl').html(),MData.eventlistFooter)).attr('id','').find('.selected').removeClass('selected').end().find('footer item:eq(3)).addClass('selected'); $('content').css({“top”:$('header').height()+'px'}); setTimeout(函数(){ scrollinit(); },0); onScrollEnd=true;/?? 这个。render(); }, 活动:{ “单击#sendDm”:“sendDm” }, el:$(“正文”), sendDm:函数(e){ 警报(“发送dm”); e、 预防默认值(); }, render:function(){ var html=“”; html+=Mustache.to_html($(“#userTpl”).html(),this.options.userData); $('下拉').css(“显示”,“无”); $('#ajaxEvent').html(html); log(this.options.userId); 如果(this.options.userName!=“我”){ $('#dm')。删除(); } 计算时间(); 函数calTime(){ _.each($('.user timeStamp')、函数(日期){ $(date.html(humaneDate(date.innerHTML)); }); } 设置间隔(计算时间,60000) 归还这个; } }); //路由器中的代码 var newUser=newusercol()//新收藏 newUser.fetch({ 数据:param, 成功:功能(模型、数据){ 新用户视图({userData:data,userId:param}) } })

Backbone.js 在我多次查看新视图后,主干将多事件绑定到一个按钮 var UserView=Backbone.View.extend({ 初始化:函数(){ MData.blankHeader.data.topBar.title=''+this.options.userName+''; MData.blankHeader.data.topBar.btn1=''; MData.blankHeader.data.topBar.btn2=''; $('header').html(Mustache.to_html($('headerTpl').html(),MData.blankHeader)).append(“”); $('footer').html(Mustache.to_html($('footerTpl').html(),MData.eventlistFooter)).attr('id','').find('.selected').removeClass('selected').end().find('footer item:eq(3)).addClass('selected'); $('content').css({“top”:$('header').height()+'px'}); setTimeout(函数(){ scrollinit(); },0); onScrollEnd=true;/?? 这个。render(); }, 活动:{ “单击#sendDm”:“sendDm” }, el:$(“正文”), sendDm:函数(e){ 警报(“发送dm”); e、 预防默认值(); }, render:function(){ var html=“”; html+=Mustache.to_html($(“#userTpl”).html(),this.options.userData); $('下拉').css(“显示”,“无”); $('#ajaxEvent').html(html); log(this.options.userId); 如果(this.options.userName!=“我”){ $('#dm')。删除(); } 计算时间(); 函数calTime(){ _.each($('.user timeStamp')、函数(日期){ $(date.html(humaneDate(date.innerHTML)); }); } 设置间隔(计算时间,60000) 归还这个; } }); //路由器中的代码 var newUser=newusercol()//新收藏 newUser.fetch({ 数据:param, 成功:功能(模型、数据){ 新用户视图({userData:data,userId:param}) } }),backbone.js,Backbone.js,因此,当我多次查看此页面时(更改地址栏中的参数),主干将多次新建UserView,事件绑定到按钮将多次触发, 如何使按钮只启动一次。您有内存泄漏和僵尸视图对象 主干视图中的事件范围为指定(或为您生成)的el。由于您已将el指定为body,因此单击#sendDm事件将找到id为sendDm的元素的任何实例 当您在url中更改路由时,路由器将接收更改并加载视图。。。但是,旧视图从未被正确关闭或删除,因此内存中会留下一个僵尸视图对象,绑定到#sendDm元素的click事件。每次移动到新路线并加载另一

因此,当我多次查看此页面时(更改地址栏中的参数),主干将多次新建UserView,事件绑定到按钮将多次触发,
如何使按钮只启动一次。

您有内存泄漏和僵尸视图对象

主干视图中的
事件
范围为指定(或为您生成)的
el
。由于您已将
el
指定为
body
,因此
单击#sendDm
事件将找到id为
sendDm
的元素的任何实例

当您在url中更改路由时,路由器将接收更改并加载视图。。。但是,旧视图从未被正确关闭或删除,因此内存中会留下一个僵尸视图对象,绑定到
#sendDm
元素的click事件。每次移动到新路线并加载另一个视图时,都会留下另一个绑定到该元素的僵尸表单

不要将
body
指定为您的
el
。另外-不要从视图的initialize方法调用
this.render()
。相反,让您的路由器处理
body
的知识,并让它渲染视图,同时删除旧视图:

var UserView = Backbone.View.extend({
        initialize: function(){
            MData.blankHeader.data.topBar.title = '<h1 id="titleLogo">' + this.options.userName + '</h1>';
            MData.blankHeader.data.topBar.btn1 = '';
            MData.blankHeader.data.topBar.btn2 = '<a href="#" id="sendDm" class="cu-round-btn">发私信</a>';
            $('header').html(Mustache.to_html($('#headerTpl').html(), MData.blankHeader)).append('<div class="topbar-shadow"></div>'); 
            $('footer').html(Mustache.to_html($('#footerTpl').html(), MData.eventlistFooter)).attr('id','').find('.selected').removeClass('selected').end().find('.footer-item:eq(3)').addClass('selected');
            $('#content').css({"top": $('header').height() + 'px'});
            setTimeout(function(){
                scrollinit(); 
            },0);
            onScrollEnd = true;//??
            this.render();
        },

        events:{
            "click #sendDm" : "sendDm"
        },

        el: $('body'),

        sendDm: function(e){
            alert('send dm');
            e.preventDefault();
        },

        render: function(){
            var html = "";
            html += Mustache.to_html($("#userTpl").html(), this.options.userData);
            $('#pullDown').css("display","none");
            $('#ajaxEvent').html(html);
            console.log(this.options.userId);
            if(this.options.userName != "me"){
                $('#dm').remove();
            }
            calTime();
            function calTime(){
                _.each($('.user-timeStamp'), function(date){
                    $(date).html(humaneDate(date.innerHTML));
                });
            }
            setInterval(calTime,60000)
            return this;
        }
    });   



//code in Router
    var newUser = new UserCol();//new a Collection
                    newUser.fetch({
                        data: param,
                        success: function(model,data){
                            new UserView({userData: data, userId: param})
                        }
                    })

您需要发布UserView的代码
var newUser = new UserCol();//new a Collection

MyRouter = Backbone.Router.extend({
  routes: {"some/route/:id": "showIt"},

  initialize: function(){
    _.bindAll(this, "showUser");
  }

  showIt: function(id){
    newUser.fetch({
      data: param,
      success: this.showUser
    });
  },

  showUser: function(model,data){
    if (this.userView){
      this.userView.unbind();
      this.userView.remove();
    }
    var view = new UserView({userData: data, userId: param});
    view.render();
    $('body').html(view.el);
    this.userView = view;
  }
});