你能用你自己的函数安全地扩展Ti或Ti.UI对象吗?

时间:2013-01-15 16:07:53

标签: user-interface include styles titanium require

我正在开发一款中型Appcelerator Titanium应用。我想扩展Ti.UI对象,我想知道这是否安全。

我想做什么 将许多与UI相关的辅助函数和对象存储为Ti.UI树的一部分。

一个简单的例子是:

Ti.UI.COLORS = {
    RED: '#213234',
    BLUE: '#ABDCEF'
}

我最关心的是,这可能是不安全的,或者只是不能面向未来。

我为什么要这样做 我对Titanium的JSS有过不好的经历,我目前正在CSS.js文件中存储和检索我的文件。此文件捆绑了一些使样式更容易的函数和对象(如上面的颜色示例),并将它们与作为对象存储的大型样式类列表相结合。这些类使用了辅助函数。

像这样:

//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文件中重新包含/要求帮助函数。这感觉很尴尬。我试图严格遵守CommonJS的做法,只使用require()而不做include()。但是,如果我使用require()添加辅助函数,就像这样......

var cssHelpers = require('css-helpers.js')

...然后我需要为所有助手添加前缀,如此...

exports.styles = {
    winHome: { 
        backgroundColor: cssHelpers.COLORS.RED,
    },
}

这就是我想在应用程序初始化期间将这些基本内容放入Ti.UI的原因。然后我会在任何地方都有样式帮助函数。

2 个答案:

答案 0 :(得分:1)

如果必须扩展默认对象

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

答案 1 :(得分:0)

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

不必为我的CSS助手添加其父级名称的技巧如下:

  1. 在需要帮助程序功能的文件中需要CSS-helpers.js文件。
  2. 让CSS-helper.js的exports对象只返回一个函数。
  3. 要求后立即执行该功能。像这样:

    //包含CSS辅助函数作为局部变量 要求( '共享/ CSS-助手')();

  4. 在CCS-helpers的一个导出函数中,使用'this'变量将函数直接应用于包含globals的js上下文:

    exports = function(){     这个['IOS_ANDROID'] =函数(ios,android){etc};     这个['otherHelperFunction'] = function(){}; }

  5. 现在,在包含CSS-helpers的文件中,您可以使用辅助函数,如IOS_ANDROID(),不带任何前缀。那是因为CSS-helpers中的'this'变量指向调用该函数的上下文。