【发布时间】:2013-03-07 10:17:28
【问题描述】:
我正在使用一个框架(流星,但我猜的问题并不重要),它提供了单独的功能..
我的问题是我意识到我正在使用越来越多的全局变量以使它们在这些函数之间可访问。例如 map 对象:
Meteor.startup(function () {
map = L.map('map_canvas').locate({setView: true, maxZoom: 21});
L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
attribution: '© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
}).addTo(map);
});
我需要在任何地方访问 map 来操作我的地图(使用 Leaflet) 例如:
Template.messages.events({
'click .delete-message': function (e,t) {
e.stopPropagation();
removeItem(e.target.id);
},
'click .message': function (e,t) {
console.log('event clicked');
map.setView([e.target.getAttribute('data-lat'),e.target.getAttribute('data-lng')], 16);
}
});
当我想创建一个我想在不同地方使用的标记对象时,我遇到了同样的问题......
是 Meteor 是以这种方式构建的,还是有更合适/干净的 JS 替代方案而不是使东西全球化?
编辑感谢您的回答,您能否添加一个代码示例,例如使用您提到的模式之一,但基于我的代码?这样我可以更好地理解它。
【问题讨论】:
-
你可能想看看这个其他的,可能类似的question/answer thread。
-
除了“命名空间”选项之外,您还可以对所有代码使用单个闭包(也称为模块模式),以便您的函数可以使用变量,但其他人不能使用。
-
This article 很棒。
-
@jahroy 确实如此。
-
@大家我更新了我的问题..为了将理论付诸实践,有一个基于我的代码的例子会有很大帮助?
标签: javascript oop global-variables closures