我正在制作一个中等大小的Appcelerator Titanium应用程序。我想扩展Ti。UI对象,我想知道这是否安全。
我想做什么将许多与ui相关的辅助函数和对象存储为ui的一部分。UI树。
一个简单的例子是:
Ti.UI.COLORS = {
RED: '#213234',
BLUE: '#ABDCEF'
}
我最担心的是,这可能是不安全的,或者只是不适合未来。
为什么我要这样做我对Titanium的JSS有过不好的体验,我目前正在CSS.js文件中存储和检索我的文件。这个文件捆绑了一些使样式化更容易的函数和对象(如上面的colors示例),并将它们与一个长长的样式类列表组合在一起,以对象的形式存储。这些类使用了辅助函数。
一样:
//Provide helper functions
COLORS = { RED: 'etc' };
IOS_ANDROID = function(iosValue,androidValue){
if (Device.isIOS) {
return iosValue
} else {
return androidValue
};
//Provide the styles as exports object (using commonJS)
exports.styles = {
winHome: {
backgroundColor: COLORS.RED
},
winProducts: {
navBarHidden: IOS_ANDROID(true,false),
}
}
现在我的应用程序已经长大了,这个样式对象的大小变得很烦人。我试图将样式拆分为几个.js文件,并使用包括和要求将它们(和必要的函数)组合起来。现在我有了'css-Home.js' 'css-Products.js'等等
这工作,有点,但我目前需要重新包括/要求在每个css-.js文件的辅助功能。这感觉很尴尬。我正试图严格执行仅使用require()而不做include()的CommonJS实践。但是,如果我使用require()来添加辅助函数,就像这样…
var cssHelpers = require('css-helpers.js')
…那么我就需要给所有的帮助器加上这个变量的前缀,像这样…
exports.styles = {
winHome: {
backgroundColor: cssHelpers.COLORS.RED,
},
}
这就是为什么我想把这些基本的东西放到Ti里。UI在应用程序初始化期间。然后让样式辅助函数在任何地方都可用。
如果您必须扩展默认对象
我找到了一个体面的解决方案,不涉及更改Ti.UI。这个提示来自于尝试在Android上运行应用程序,发现它在不同部分之间传递的变量更少。所以我需要更深入地挖掘CommonJS的原则以及require()和Ti.include()的含义。
不需要在CSS helper的父类名称前加上它们的前缀的技巧如下:- 在需要帮助函数的文件中需要一个CSS-helpers.js文件。
- 让CSS-helper.js的exports对象只返回一个函数。
请求后立即执行该功能。像这样:
//包含CSS辅助函数作为局部变量要求(共享/css-helpers) (),
在CCS-helpers的一个exports函数中,使用'this'变量将函数直接应用到包含全局变量的js上下文中:
exports = function(){this['IOS_ANDROID'] = function(ios,android){etc};this['otherHelperFunction'] = function(){};}
现在,在包含CSS-helpers的文件中,您可以使用像IOS_ANDROID()这样不带任何前缀的helper函数。这是因为CSS-helpers中的'this'变量指向调用该函数的上下文。