2014-07-22 25 views
0

我很新的骨干,所以它可能是愚蠢的错误。 当我按发送按钮(#send_email_button)时,一个电子邮件应呈现,因为它应该,添加新的项目收集'添加'触发器只有一次

但当我再次按它,​​没有更多的电子邮件添加。 唯一的日志我得到的是:(后第二+推) :

console.log('adding to collection'); 
console.log('about to exit'); 

换句话说,它甚至没有进入在收集add处理。 有人可以解释为什么以及如何解决这个问题?

非常感谢! 编辑:如果我删除了一个呈现的电子邮件,并再次按发送,新电子邮件正确添加。

这里的相关代码:

$(document).ready(function() { 
    //email model 
    var EmailModel = Backbone.Model.extend({ 

     defaults: { 
      id: '', 
      email_from: '', 
      email_recipient: '', 
      email_subject: '', 
      email_data: '', 
      is_email_read: '', 
      email_date: '' 
     } 


    }); 

    //email collection 
    var email_collection = Backbone.Collection.extend({ 
     model: EmailModel, 
     url: '/fetch_received_emails' 
    }); 

    var email_collection = new email_collection(); 

    var EmailView = Backbone.View.extend({ 
     model: new EmailModel(), 
     tagName:'li', 
     events: { 

      "click #email_template_view" : "click_email" 
     }, 

     initialize: function() { 
      console.log('initializing email view'); 
      this.template = _.template($('#email_template').html()); 
      console.log('finish initializing email view'); 
     }, 

     render: function() { 

      this.$el.html(this.template(this.model.toJSON())); 

      return this; 
     }, 

     click_email: function() { 
      this.model.is_email_read = true; 
      $('#toggle_part_email').toggleClass('no_display'); 
     }, 

    }); 

    var CollectionView = Backbone.View.extend({ 
     model: email_collection, 
     el: $('#emails_class'), 
     initialize: function() { 
      console.log('init to collection view'); 
      this.model.fetch(); 
      this.render(); 
      this.model.on('change', this.render, this); 
      this.model.on('add', this.render, this); 
      this.model.on('remove', this.render, this); 

     }, 

     render: function(){ 
      console.log('rendering collection'); 
      var that = this, 
       i; 

      that.$el.html(''); 

      emails = this.model.toArray(); 

      for (i in emails){ 
       console.log(' printing emails'); 
       console.log(emails[i]); 

       var new_email_view = new EmailView({model : emails[i]}); 

       that.$el.append(new_email_view.render().$el); 
      } 
      console.log('about to exit collection view'); 
      return this; 
     } 
    }); 






    $('#send_email_button').click(function(event){ 

     // event.preventDefault(); 
     var sending_date= new Date(); 
     sending_date = sending_date.toDateString() 

     //new email to ajax 

     console.log('adding to collection'); 
     email_collection.add(new EmailModel({ 
       'email_from':$('#email_from').val(), 
       'email_recipient' :$('#email_recipient').val(), 
       'email_subject': $('#email_subject').val(), 
       'email_data':$('#email_data').val(), 
       'is_email_read':false, 
       'email_date': sending_date 
      })); 
     console.log('about to exit'); 
     return false; 
    }); 
    //create singelton for the collection view 

    var c = new CollectionView(); 
}); 

回答

1

你为什么不尝试使用点击事件作为另一种?在collectionView里面再次使用事件。

events: { 

      "click #send_email_button" : "AnyNameThatYouWant" 
     }, 

AnyNameThatYouWant: function() { 
      //Do all the things 
     }, 

试试这个。

+0

没有。出于某种原因AnyNameThatYouWant从来没有打电话......(写在那里的警报) – Farseer

+1

代码必须在collectinView中。并确保#send_email_button位于视图El(#emails_class)内。 – rcarvalho

+0

工作。非常感谢,伙计! – Farseer

相关问题