以下代码示例,如果不用 window 如何,在别的 .js
文件里引用呢?
// app.js
// ------
(function() {
require(['router'], function(router) {
var app = {
initialize: function() {
this.bindEvents();
},
bindEvents: function() {
window.onload = this.onDeviceReady();
},
onDeviceReady: function() {
main.receivedEvent('deviceready');
},
receivedEvent: function(event) {
switch (event) {
case 'deviceready':
app.initMian();
break;
}
},
initMian: function() {
// 不用 window 如何把这货在别的 .js 里可用?
window.db = openDatabase('db', '1.0', 'description', 10240);
window.$ = jQuery;
}
};
app.initialize();
});
})();
1
whatisnew OP 在另外一个文件,比如,router.js
我就可以用 $('.element').on('event', function... 我就可以用 db.transaction(function(tx) { ... |
2
yangff 2015-04-18 20:24:08 +08:00 via Android
export?
|
3
haozhang 2015-04-18 20:35:41 +08:00
用命名空间啊,你暴露一个变量在全局环境里面,所有东西挂在那个变量上面。
|
4
jarlyyn 2015-04-18 20:37:35 +08:00
把你所有的js放在一个闭包/空间里呢?
我觉得直接用window.db不如直接用windows.myapp.db. |
5
whatisnew OP |
6
wxt2005 2015-04-18 20:59:00 +08:00
@whatisnew 暴露一个和暴露多个的区别吧。你现在是刚好只需要注册一个变量,所以感觉没啥区别,如果以后代码加了新的功能怎么办?
|
7
lk09364 2015-04-18 21:05:25 +08:00
@whatisnew
> 那这样的话,除了名字不叫 window 有什么区别么。。 对,没有,不过这样就不会和别的库冲突了。 node.js 里的 export 容许你 require() 出来,并自定义变数名称,这样就绝对不会冲突—— |
9
whatisnew OP @wxt2005 就是只有在 app.js 这个文件里才用 window,其他都是 require 出来的 mvc 文件,但是在 model 和 controller 这层要用到 db 这些变量,因为不可能每 new 一次都 open 一下 db 啊
|
10
haozhang 2015-04-18 21:22:43 +08:00
去看看YUI...了解下明明空间。
|
11
haozhang 2015-04-18 21:22:56 +08:00
命名空间 ...
|
13
NemoAlex 2015-04-19 13:09:56 +08:00
你 @ 了我,所以我进来看了一下
但是看完,我都不知道说什么好了 所以就这样吧 |
14
ghbjy1128 2015-04-25 08:34:24 +08:00
楼主的问题其实就是Js设计模式的问题,现在有很多流派,自己随便选个自己喜欢的就可以。
个人偏好还是定义一个命名空间,如果有什么需要外部调用的,return 就可以,大概这样子。 window.FUN = (window.FUN || {}); // Main Functions FUN = (function ($) { 'use strict'; function todo() { ... } return { todo: doing } }); ... FUN.doing(); |