我正在使用Titanium for Android编写应用程序。我在一个JS文件中有很多代码。我想知道是否有像php的include这样的函数将代码分解成多个文件然后只包含它们。
由于
答案 0 :(得分:2)
使用CommonJS / RequireJS方法,特别是require
命令。这是用于处理Titanium中大型系统的(强烈)推荐方式,并且在其网站上有详细记录,以及处理特定于Titanium的JavaScript模块化的许多最佳实践。 Here is the documentation from Titanium on this.
例如,要创建一个封装某种“视图”的模块,请将其放在名为MyCustomView.js
的文件中,并带有以下内容:
// MyCustomView.js
function MyCustomView(message) {
var self = Ti.UI.createView({
backgroundColor : 'red'
});
var label = Ti.UI.createLabel({
text : message,
top : 15,
.... // Other initialization
});
// ... Other initialization for your custom view, event listeners etc.
return self;
}
module.exports = MyCustomView;
现在您可以在另一个类中轻松使用此模块,假设您将其放在/Resources
文件夹中,让我们在app.js
中加载模块并将其添加到主窗口。
// app.js
var MyCustomView = require('MyCustomView');
var myView = new MyCustomView('A message!');
Titanium.UI.currentWindow.add(myView);
您可以使用此方法制作自定义视图,可重用代码库以及您想要的任何其他内容。另一个常见的事情是拥有一个具有许多不同辅助函数的Utility类:
// Utility.js
exports.cleanString = function(string) {
// Replace evil characters
var ret = string.replace(/[|&;$%@"<>()+,]/g, "");
// replace double single quotes
return ret.replace(/"/g, "''");
}
这种方法可以很容易地使用:
// app.js
var Utility = require('Utility.js');
Ti.API.info(Utility.cleanString('He##o W&orld$'));
我使用它的另一个常用方法是实现Singleton pattern,因为每个加载的模块都是它自己的功能上下文,所以如果你愿意,你可以拥有持久的值:
// ManagerSingleton.js
var SpriteManager = {
count : 0
};
exports.addSprite = function() {
SpriteManager.count++;
}
exports.removeSprite = function() {
SpriteManager.count--;
}
您可以像实用程序一样加载和使用它:
// app.js
var ManagerSingleton = require('ManagerSingleton');
ManagerSingleton.addSprite();
这是一种更优雅的解决方案,而不是使用全局变量。这些方法绝不是完美的,但它们为我节省了大量时间和挫折,并为我的Titanium代码增加了各种尺寸和类型的应用程序的深度,优雅和可读性。
答案 1 :(得分:1)
Javascript世界中有两个主要的模块系统。 一个是CommonJS,第二个是AMD。关于哪一个最好以及出于何种目的,有很多讨论。 CommonJS更广泛地用于服务器端JS,而AMD主要用于浏览器JS。
RequireJS(requirejs.org)似乎是最受欢迎的AMD系统。
有关JS模块系统的信息,请阅读:http://addyosmani.com/writing-modular-js/