次の(簡略化された)オブジェクトリテラルがあります。アイコンメソッドは、クロージャを使用してアイコン変数を非表示にします。これは、後で検索するための連想配列として使用したいと思います。
var MapListings = {
icons: function () {
var allIcons = [] ;
return {
add: function (iconType, iconImage) {
var icon = new GIcon(MapListings.baseIcon);
icon.image = iconImage;
allIcons[iconType] = icon; // fails, but this is what I want
// allIcons.push(icon); // works, but this is not what I want
},
get: function () {
return allIcons;
}
};
} ()
}
次のように、アイコンオブジェクトにアイテムを追加します。
MapListings.icons.add("c7", "/images/maps/blue.png");
MapListings.icons.add("c8", "/images/maps/red.png");
以下は機能しません。
allIcons[iconType] = icon;
しかし、これはします:
allIcons.push(icon);
クロージャーの外では、連想配列スタイルは正常に機能するので、おそらくjQueryとの競合がありますか?ファイアバグaで発生するエラーは、未定義であり、ライブラリから発生しているように見えます。連想配列のスタイルを維持したい。
何か案は?
アップデート
この競合はグーグルマップから来ているようです。奇妙なことに、これを回避する方法がわかりません。
ダンバスアップデート
ベースGIcon()オブジェクトを返したオブジェクトリテラルの部分は、オブジェクトをまったく返していませんでした。そのため、オブジェクトには適切なプロパティがありませんでした。
baseIcon: function () {
var base = new GIcon();
base.shadow = '/images/maps/shadow.png';
base.iconSize = new GSize(12, 20);
base.shadowSize = new GSize(22, 20);
base.iconAnchor = new GPoint(6, 20);
base.infoWindowAnchor = new GPoint(5, 1);
return base;
}
また、MapListings.baseIconはMapListings.baseIcon()と同じではありません。ドー