用户界面-您可以安全地扩展Ti或Ti.UI对象和你自己的函数



我正在制作一个中等大小的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在应用程序初始化期间。然后让样式辅助函数在任何地方都可用。

如果您必须扩展默认对象

,请尝试使用applyproperties方法,这是推荐的方法。

我找到了一个体面的解决方案,不涉及更改Ti.UI。这个提示来自于尝试在Android上运行应用程序,发现它在不同部分之间传递的变量更少。所以我需要更深入地挖掘CommonJS的原则以及require()和Ti.include()的含义。

不需要在CSS helper的父类名称前加上它们的前缀的技巧如下:
  1. 在需要帮助函数的文件中需要一个CSS-helpers.js文件。
  2. 让CSS-helper.js的exports对象只返回一个函数。
  3. 请求后立即执行该功能。像这样:

    //包含CSS辅助函数作为局部变量要求(共享/css-helpers) (),

  4. 在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'变量指向调用该函数的上下文。

相关内容

  • 没有找到相关文章

最新更新