2013-03-29 88 views
1

我有一個谷歌地圖,用戶可以點擊(在地圖上到處),點擊事件打開一個引導模式窗口,包含一個表單。我的問題是,如何/在哪裏處理這個提交事件添加標記到標記集合,將其保存到數據庫等。谷歌地圖和Backbone.js事件觸發

目前我有一個地圖視圖,呈現谷歌地圖,並添加一個事件聆聽點擊。點擊地圖打開Modal。

App.Views.Map = Backbone.View.extend({ 
... 
initializeMap : function(){} 
... 
addMapEventlistener : function() { 

    google.maps.event.addListener(this.map, 'dblclick', function(event) { 

    var coords = event.latLng.toUrlValue(); 

    var carray = coords.split(","); 

    var model = new Backbone.Model({ coords: carray }); 

    var view = new App.Views.Modal({ model: model }); 

    var $modalEl = $("#modal"); 
    $modalEl.html(view.render().el); 
    $modalEl.modal(); 
    }); 
}  


App.Views.App = Backbone.View.extend({ 

     initialize: function() { 

var addMarkerView = new App.Views.AddMarker({ collection: App.markers }); 

     } 

}); 

// add marker view 

    App.Views.AddMarker = Backbone.View.extend({ 

     el: '#addForm', 

     initialize: function() { 

      $('<input>', { 
       type: 'submit', 
       value: 'Submit', 
       class: 'smt' 
      }).appendTo(this.$el); 

      console.log('AddMarker init run'); // this echoed out 

     }, 

     events: { 
      'submit' : 'addMarker'  
     }, 

     addMarker: function(e) { 

      e.preventDefault(); 

      alert('hello'); 

     }, 

    }); 

我的猜測是,在地圖上點擊事件後呈現的形式,所以我必須設置骨幹事件監聽模式打開後,不知何故,並處理集合視圖中的表單提交,對吧?

回答

0

您可能想要使用events對象來綁定您的偵聽器。
關於何時(重新)綁定您的事件。當實例化視圖時,事件對象中指定的偵聽器將綁定到視圖元素的。這意味着如果你的事件針對的是一個子元素,那麼這個時候孩子是否存在並不重要。現在,您必須在特殊情況下重新綁定聽衆,其中您在沒有setElement方法的情況下更改視圖元素。

例子:

<div id="#mydiv"></div> 

而且要綁定在這個div裏面的按鈕事件(你後來創建一些)。 恩,here's an example

+0

感謝您的建議。它不會將提交按鈕添加到表單中,即使初始化方法仍在運行。再次,這個視圖在我點擊地圖之前運行,所以這次表單只在模板中,所以不是「活」的。這種方式肯定不能將提交按鈕添加到表單中。 編輯主帖^ – subdesign

0

好的,解決了。我的錯。我將事件添加到錯誤的視圖中,我必須將它添加到App.Views.Modal視圖(當然事件發生在模式中)。謝謝你的時間!