我想创建一个包含或继承自google.maps.Polygon
类的特殊类型的多边形对象。我希望它有一个可以收听的自定义edited
事件,理想情况是通过正常的addListener
接口。可以这样做吗?
答案 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文章中,我们找到了两种方法。
在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!!!');
在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!!!');
我更喜欢方法#2,因为它涉及较少的黑魔法。