2012-04-30 216 views
0

看了看四周左右,但找不到任何有用的,所以..觸發骨幹事件功能

我有一個接觸卡視Backbone.js的接觸模式。該視圖有許多輸入,您可以在其中編輯聯繫人信息。

我在頁面上有很多其他形式的主幹模型,所以他們使用'保存按鈕'來保存。我基本上要保存這個按鈕也觸發Contacts.CardView.saveCard();(這有可能是FileApp.cardView.saveCard as well? - 我的一些代碼如下

有沒有辦法做到這一點,我想我可以只使用以下,但似乎它?事件不會綁定到任何東西的看法?:

events: { 
    "change input": "change", 
    "click #save": "saveCard" 
}, 
$('#save').click(function() { 
    FileApp.cardView.saveCard; 
    _SAVE.save(); 
}) 

CardView外

window.Contacts.CardView = Backbone.View.extend({ 

    events: { 
     "click #save": "saveCard" // doesnt work because #save is outside the view? 
    }, 

    saveCard: function(e) { 
     this.model.set({ 
      name:$('#name').val() 
     }); 
     if (this.model.isNew()) { 
      var self = this; 
      FileApp.contactList.create(this.model, { 
       success:function() { 
        FileApp.navigate('contacts/' + self.model.id, false); 
       } 
      }); 
     } else { 
      this.model.save(); 
     } 

     return false; 
    } 
} 

路由器:

var FileRouter = Backbone.Router.extend({ 
    contactCard:function (id) { 
     if (this.contactList) { 
      this.cardList = new Contacts.CardCollection(); 
      var self = this; 
      this.cardList.fetch({ 
       data: { 
        "id":id 
       }, 
       success: function(collection, response) { 
        if (self.cardView) self.cardView.close(); 
        self.cardView = new Contacts.CardView({ 
         model: collection.models[0] 
        }); 
        self.cardView.render(); 
       } 
      }); 

     } else { 
      CONTACT_ID = id; 
      this.list(); 
     } 
    } 
}); 

var FileApp = new FileRouter(); 

回答

4

一種選擇是創建自己的活動對象;這種情況下:

// Before initializing views, etc. 
var formProxy = {}; 
_.extend(formProxy, Backbone.Events); 

// Add the listener in the initialize for the CardView 
window.Contacts.CardView = Backbone.View.extend({ 
    initialize : function() { 
    formProxy.on('save', this.saveCard, this); 
    }, 
    saveCard: function() { 
    this.model.set({ 
     name:$('#name').val() 
    }); 
    if (this.model.isNew()) { 
     var self = this; 
     FileApp.contactList.create(this.model, { 
      success:function() { 
       FileApp.navigate('contacts/' + self.model.id, false); 
      } 
     }); 
    } else { 
     this.model.save(); 
    } 
    return false; 
    } 
} 

// Save 
$('#save').click(function() { 
    formProxy.trigger('save'); 
}); 

參見:http://documentcloud.github.com/backbone/#Events

+0

謝謝!這很好:) – Benno

+0

如果我使用require.js與多個文件,我該如何實現這一點? – Lion789