3

Alloyフレームワークを使用してチタンSDK3.02でプロジェクトをビルドしています。タブ付きのアプリケーションで、tab1内のボタンからtab2のビューを変更したい

tab1.xml

...
    <Button id="button" onClick="setup">
...

tab1.js

function setup(){
    //this doesn't work
    var view = Alloy.createController('tab2');
    view.changeBackground('blue');
    $.tabGroup.setActiveTab(1);
}

tab2.xml

...
    <View id="view" backgroundColor="red">
...

tab2.js

...
    exports.changeBackground = function(color){
        $.view.backgroundColor = color;
        //this runs eg
        Ti.API.info('function running');
    }

これが機能しない理由を理解しています。ビューに追加されないコントローラーの新しいインスタンスを作成しています。しかし、私は既存のコントローラーにアクセスしたいと思います。私が試してみました

var view = require('tab2');
view.changeBackground('blue');

しかし、これにより「モジュールが見つかりません」というエラーが発生します。これが理にかなっているといいのですが

ありがとう

4

2 に答える 2

2

解決しました

tab2の関数をAlloy.Globalとして設定するとうまくいきました。

tab1.xml

...
    <Button id="button" onClick="setup">
...

tab1.js

function setup(){
    var changeBackgroundColor = Alloy.Globals.changeBackgroundColor;
    changeBackgroundColor('blue');
    $.tabGroup.setActiveTab(1);
}

tab2.xml

...
    var changeBackground = function(color){
        $.view.backgroundColor = color;
    }
    Alloy.Global.changeBackGroundColor = changeBackground;
...
于 2013-03-25T21:23:07.550 に答える
0

それが1つの方法です。もう1つ(グローバルを回避するため、IMHOの方が優れています)は単純です。次の操作を行うだけでタブにアクセスできます。

function setup(){
    //This DOES work.
    // Just keep in mind that you must use the tab index corresponding to your tab.
    // Also, If your view actually uses a window and the tab is on your TabGroup view,
    // you should do $.tabGroup.tabs[1].window.
    var view = $.tabGroup.tabs[1]; 
    view.changeBackground('blue');
    $.tabGroup.setActiveTab(1);
}
于 2013-10-26T16:03:43.220 に答える