Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
User interface 您能用自己的函数安全地扩展Ti或Ti.UI对象吗?_User Interface_Include_Styles_Titanium_Require - Fatal编程技术网

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

User interface 您能用自己的函数安全地扩展Ti或Ti.UI对象吗?,user-interface,include,styles,titanium,require,User Interface,Include,Styles,Titanium,Require,我正在开发一款中型的Appcelerator钛合金应用程序。我想扩展Ti.UI对象,我想知道这是否安全 我想做什么 作为Ti.UI树的一部分,存储大量与UI相关的帮助器函数和对象 一个简单的例子是: Ti.UI.COLORS = { RED: '#213234', BLUE: '#ABDCEF' } 我最担心的是,这可能是不安全的,或者只是不能证明未来 我为什么要这么做 我对Tianium的JSS有过不好的体验,目前我正在CSS.js文件中存储和检索我的文件。这个文件捆绑了一些

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

我想做什么 作为Ti.UI树的一部分,存储大量与UI相关的帮助器函数和对象

一个简单的例子是:

Ti.UI.COLORS = {
    RED: '#213234',
    BLUE: '#ABDCEF'
}
我最担心的是,这可能是不安全的,或者只是不能证明未来

我为什么要这么做 我对Tianium的JSS有过不好的体验,目前我正在CSS.js文件中存储和检索我的文件。这个文件捆绑了一些函数和对象,使样式设置更容易(如上面的颜色示例),并将它们与一个大的样式类列表结合起来,存储为对象。这些类利用了helper函数

像这样:

//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),
    }
}
现在,我的应用程序已经发展壮大,这个styles对象的大小变得越来越烦人。我正在尝试将样式拆分为几个.js文件,并使用includes和requires将它们(以及必要的函数)组合起来。所以我现在有了一个“css Home.js”、“css Products.js”等等

这在某种程度上是可行的,但我目前需要在每个css-.js文件中重新包含/要求helper函数。这感觉很尴尬。我试图严格遵守只使用require()而不使用include()的常见JS实践。但是,如果我使用require()添加助手函数,就像这样

var cssHelpers = require('css-helpers.js')
exports.styles = {
    winHome: { 
        backgroundColor: cssHelpers.COLORS.RED,
    },
}
…然后我需要在所有助手前面加上这个变量,就像这样

var cssHelpers = require('css-helpers.js')
exports.styles = {
    winHome: { 
        backgroundColor: cssHelpers.COLORS.RED,
    },
}

这就是为什么我想在应用程序初始化期间将这些基本内容放入Ti.UI。然后,我将在任何地方提供样式帮助器功能。

尝试使用applyproperties方法,如果您必须扩展默认对象,这将是推荐的方法。

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

不必在我的CSS助手前面加上他们父母的名字的诀窍如下:

  • 在需要帮助函数的文件中需要CSS-helpers.js文件
  • 让CSS helper.js的导出对象只返回一个函数
  • 请求后立即执行该功能。像这样:

    //将CSS助手函数作为局部变量包括在内 需要('shared/css helpers')()

  • 在CCS helpers的one exports函数中,使用“this”变量将函数直接应用于包含全局变量的js上下文:

    导出=函数(){ 这个['IOS_ANDROID']=函数(IOS,ANDROID){etc}; 此['otherHelperFunction']=函数(){}; }


  • 现在,在包含CSS助手的文件中,您可以使用诸如IOS_ANDROID()之类的助手函数,而无需任何前缀。这是因为CSS helpers中的“this”变量指向调用该函数的上下文。

    我认为扩展Ti对象的做法不好。如果Ti决定使用您正在使用的东西,您将被用软管冲洗。我认为严格使用CommonJS方法很重要,但我认为有时候include是正确的方法。我会寻找另一种方法,而不是扩展Ti对象。你知道这一切都是为了你吗?也许你应该开始向它迁移?我有一个中型到大型的项目,我能够成功地迁移,我没有回头看!