2015-10-06 59 views
1
var $ = jQuery = require('jquery'), 
    Backbone = require('backbone'), 
    Handlebars = require('handlebars'), 
    _ = require('underscore'), 
    Filter = require('../../libs/filters'), 
    orderActionTemplate = require("../../templates/order/OrderAction.html"), 
    orderListView = require('./OrderListView'); 

var OrderActionView = Backbone.View.extend({ 

    el: "#id-order-action", 

    initialize: function (options) { 
     var self = this; 
     this.action = this.$el.find(".nav-pills li.active a").attr("action"); 
     if (options !== null && (typeof options !== 'undefined')) { 

      self.channel_id = options.channel_id; 
      self.channel_type = options.channel_type; 
      this.getActions(self.channel_type, self.action); // By Default show to pack orders 
      this.orderListView = new orderListView({ 
       action: self.action, 
       channel_id: self.channel_id, 
       el: ".id-to-pack" 
      }); 
     } else { 
      this.orderListView = new orderListView({ 
       action: self.action, 
       el: ".id-to-pack" 
      }); 

     } 
     return this.orderListView; 
    }, 

    events: { 
     "click a.a-action": "getActiveTabActions" 
    }, 

    getActiveTabActions: function (e) { 
     var self = this; 
     e.preventDefault(); 
     var liTab = $(e.currentTarget).attr("action"); 
     this.getActions(this.channel_type, liTab); 
     console.log(self.channel_id); 

     if (typeof self.channel_id !== 'undefined') { 
      this.orderListView = new orderListView({ 
       action: liTab, 
       channel_id: self.channel_id, 
       channel_type: self.channel_type, 
       el: ".id-to-pack" 
      }); 
     } 

    }, 

    getActions: function (channel_type, tab) { 
     if (typeof channel_type === 'undefined') channel_type = "DEFAULT"; 

     if ((typeof tab !== 'undefined')) { 
      var actions = Filter.actions[channel_type][tab](); 
      this.$el.find("#" + tab + "-action").html(actions); 
     } 

    }, 

    render: function() { 
     // this.$('.id-to-pack').empty().off(); 
     this.$el.html(orderActionTemplate); 
     // this.orderListView.setElement(this.$('.id-to-pack')).delegateEvents().render(); 

    } 
}); 

在我更改了代码中的options.channel_id后,点击处理程序被激发了两次。我认为在我的课id-to-pack有两个意见。如何删除相关元素中的先前视图?backbone.js中的多次单击事件

我试过empty()stopListening没有任何工作。

回答

0

我认为你需要.remove() 从DOM中移除一个视图和它的el,并调用stopListening来移除该视图listenTo'd的任何绑定事件。

http://backbonejs.org/#View-remove