1

ユーザーが(どこのマップでも)クリックできるGoogleマップがあり、クリックイベントはフォームを含むBootstrapモーダルウィンドウを開きます。私の質問は、この送信イベントを処理してマーカー コレクションにマーカーを追加したり、データベースに保存したりする方法/場所です。

現在、Googleマップをレンダリングし、クリック用のイベントリスナーを追加するマップビューがあります。地図をクリックするとモーダルが開きます。

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');

        },

    });

私の推測では、マップ上のクリック イベントの後にフォームがレンダリングされるので、モーダルが開いた後に何らかの方法でバックボーン イベントをリッスンするように設定し、フォームの送信をコレクション ビューで処理する必要があります。

4

2 に答える 2

0

わかりました、解決しました。私の悪い。イベントを間違ったビューに追加しました。それを App.Views.Modal ビューに追加する必要があります (もちろん、イベントはモーダルで発生します)。時間をありがとう!

于 2013-03-29T11:54:30.710 に答える
0

イベントオブジェクトを使用してリスナーをバインドすることもできます。
イベントを (再) バインドする場合について。ビューがインスタンス化されると、イベント オブジェクトで指定されたリスナーがビュー要素にバインドされます。これは、イベントが子要素をターゲットにする場合、その時点で子が存在するかどうかは問題ではないことを意味します。ここで、 setElement メソッドを使用せずにビュー要素を変更する特別なケースで、リスナーを再バインドする必要があります。

例:

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

そして、この div 内のボタンにイベントをバインドします (後で作成します)。さて、ここに例があります。

于 2013-03-29T10:26:59.313 に答える