0

私は中型のAppceleratorTitaniumアプリに取り組んでいます。Ti.UIオブジェクトを拡張したいのですが、これが安全かどうか疑問に思っています。

やりたいこと Ti.UIツリーの一部として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ファイルに分割し、includesとrequiresを使用してそれら(および必要な関数)を結合しようとしています。これで、「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に入れたいと思います。次に、どこでもスタイルヘルパー関数を使用できるようにします。

4

2 に答える 2

1

デフォルトのオブジェクトを拡張する必要がある場合は、推奨される方法である applyproperties メソッドを使用してみてください

于 2013-01-16T17:53:53.860 に答える
0

Ti.UI の変更を伴わない適切な解決策を見つけました。この手がかりは、Android でアプリを実行しようとしたところ、さまざまなパーツ間で渡される変数がさらに少ないことが判明したことにあります。そのため、CommonJS の原則と、require() と Ti.include() の意味をさらに深く掘り下げる必要がありました。

CSS ヘルパーの前に親の名前を付ける必要がないようにするための秘訣は次のとおりです。

  1. ヘルパー関数が必要なファイルに CSS-helpers.js ファイルが必要です。
  2. CSS-helper.js の exports オブジェクトが 1 つの関数だけを返すようにします。
  3. 要求後すぐに関数を実行します。そのようです:

    // CSS ヘルパー関数をローカル変数として含める require('shared/css-helpers')();

  4. CCS ヘルパーの one exports 関数では、'this' 変数を使用して、グローバルが含まれる js コンテキストに関数を直接適用します。

    exports = function(){ this['IOS_ANDROID'] = function(ios,android){ など }; this['otherHelperFunction'] = function(){}; }

これで、CSS ヘルパーが含まれたファイルで、プレフィックスなしで IOS_ANDROID() などのヘルパー関数を使用できるようになりました。これは、CSS ヘルパーの「this」変数が、関数を呼び出したコンテキストを指しているためです。

于 2013-01-18T10:24:23.740 に答える