如何为Google Maps api v3对象创建自定义事件?

时间:2014-01-23 23:03:10

标签: google-maps events google-maps-api-3

我想创建一个包含或继承自google.maps.Polygon类的特殊类型的多边形对象。我希望它有一个可以收听的自定义edited事件,理想情况是通过正常的addListener接口。可以这样做吗?

2 个答案:

答案 0 :(得分:7)

我喜欢JustinY的回答。

另一种方法是手动触发这样的事件:

 function CustomPolygon(options) {
     var self = this;
     // initialize any options
     console.log('init')
 }

 function edit() {
     // do work!!!
     // now tell people about it!
     google.maps.event.trigger(this, 'edited');
 }

 // extend CustomPolygon from google.maps.Polygon
 CustomPolygon.prototype = new google.maps.Polygon();
 CustomPolygon.prototype.edit = edit;

 // now you can do 
 var p = new CustomPolygon({ /*options*/
 });
 google.maps.event.addListener(p, 'edited', function () {
     document.body.innerHTML = 'edited!';
 });
 p.edit();

请参阅http://jsfiddle.net/stevejansen/hQZcT/

来源:https://developers.google.com/maps/documentation/javascript/reference#event

答案 1 :(得分:2)

在标题为Fun with MVC的Google Developers文章中,我们找到了两种方法。

  1. Binding Properties部分,我们了解到,只要在set(property, value)上调用MVCObject方法,就会调用魔术property_changed函数(如果存在)。

    // Prints "something changed to ftw!!!"
    myObject.something_changed = function(){
      console.log('something changed to ' + this.get('something'));
    }
    myObject.set('something', 'ftw!!!');
    
  2. Outputting Information部分,我们了解到,较少神秘的addListener()方法也可用于通过set()收听值的变化。以下代码片段与上面的代码完全相同。

    // Prints "something changed to ftw!!!"
    myObject.addListener('something_changed', function(){
      console.log('something changed to ' + this.get('something'));
    }
    myObject.set('something', 'ftw!!!');
    
  3. 我更喜欢方法#2,因为它涉及较少的黑魔法。