2013-03-29 92 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视图(当然事件发生在模式中)。谢谢你的时间!