全局名称空间变量:任何备选方案
Global namespaced variable: any alternative?
如果有三个对象:
- 对象A触发一个事件,传递一个"date"参数
- 对象B触发一个事件,传递一个"category"参数
- 对象C触发一个事件,传递一个谷歌地图"边界"参数
- 对象D监听事件A、B和C执行单个函数,该函数需要A(日期)、B(类别)和C(映射边界)的当前状态
有没有办法使用:
window.app = {}; //--> global
var curDate = app.appState.curDate;
var curCategory = app.appState.curCategory;
var curBounds = app.appState.curBounds;
我不太喜欢使用全局变量,即使它们是按名称命名的,因为用户可以直接从浏览器访问这些变量并破坏界面
后端仍然是安全的,但不知怎么的感觉不对。但似乎没有一个可行的替代方案可以从控制器D访问这两个变量。我注意到传递参数并使其适合可能会成为一项非常繁琐的活动,而且它似乎不太容易维护。
编辑:结构有点像这样:
App ---> app_dates ---> datesController (trigger date change event fom view)
---> app_categories ---> categoryController (trigger category change from view)
---> app_map ---> mapController (trigger map bounds change from Google map)
---> app_home ---> Listen to the events, send a request to the server with above parameters)
即使在雅虎,他们也使用一个全局变量
http://yuiblog.com/blog/2006/06/01/global-domination/
我认为,对于特定的用例(需要从应用程序中的所有部分访问的模块对象/变量),使用全局窗口而不是传递参数是可以接受的。
在我的情况下,我想创建一种"config"对象是很有用的,它将全局引导到命名空间中,并在应用程序启动时分配默认值。
try requireJS,requireJS的目的之一是不污染全局范围在requireJS中,您可以将状态对象定义为以下
define('appState', [],function(){
return {
curDate: null,
curCategory: null,
curBounds: null,
};
});
现在,对于任何需要或修改应用程序状态的模块,它只会将appState添加为依赖项,它将作为参数而不是全局变量传递,就像下面的一样
define('datesController',['appState'],function(appState){
var datesController = Backbone.View.extend({
events:{
'change #date': 'dateChanged'
}
dateChanged: function(){/*here you can access appState and modify it*/},
});
return datesController;
});
然后,每当你需要创建datesController对象时,你所需要的就是
require('datesController', function(datesController){
var datesControllerObj = new datesController({});
});
这段代码是关于requireJS的简介,你可以参考下面的教程
http://javascriptplayground.com/blog/2012/07/requirejs-amd-tutorial-introduction/
相关文章:
- JavaScript没有'JSP页面重定向后无法工作..任何解决方案
- 避免文档.write?任何替代方案
- 移动隐藏菜单适用于jsfiddle,但不适用于在线.任何解决方案都会有所帮助
- Base64太大,无法在浏览器中打开,任何替代方案
- Mozilla Firefox表示未定义Referenceerror事件,没有任何解决方案有效
- 选择下拉列表值而不是第一个索引的任何解决方案
- 我正在尝试遍历所有字母表的数组并将所有其他字母大写.任何解决方案
- jquery msgbox 的任何替代方案
- Webpart 在 ASP.NET 中是否有任何替代方案来创建可拖放内容,或使用 Jquery 进行任何混合
- 这个简单的Javascript验证的任何替代方案
- 如何制作<输入类型=“;日期“>所有浏览器都支持吗?任何替代方案
- Gmail移动CSS和JavaScript框架的任何替代方案
- 全局名称空间变量:任何备选方案
- 正在查找动画书框架.Turn.js的任何替代方案
- 是否有任何解决方案来引用javascript文件不在当前的解决方案,在VS2010智能感知
- 是否有任何解决方案来运行混合内容
- 在程序中使用不可猜测链接的任何解决方案
- firefox' toSource()函数的任何替代方案
- 谷歌地图静态api url长度超过2048字符是否有任何解决方案?目的是保存为图像
- DOMContentLoaded在访问几个网站时不会被触发.任何解决方案