添加视图打开窗口在钛

Add view to open Window in titanium

本文关键字:开窗口 视图 添加      更新时间:2023-09-26

我有3个视图:v1.xml, v2.xml, v3.xml。xml有一个按钮B1。当用户单击按钮B1时,将打开v2.xml。xml有另一个按钮B2。当用户单击按钮B2时,将打开v3.xml。

在v1.xml中创建了一个窗口。当我单击按钮B2时,我想将视图v3添加到现有窗口,我不想创建一个新窗口。我无法使用我在v1.xml中创建的窗口引用,因为我现在正在v2.xml文件中工作。

我代码:

V1.xml

<Alloy>
   <Window id="main_window">
      <View id="v1">
         <Button id="B1" />
      </View>
   </Window>
</Alloy>
V2.xml
<Alloy>
    <View id="v2">
        <Button id="B2" />
    </View>
</Alloy>
V3.xml
<Alloy>
    <View id="v3">
        <Label id="l3" text="test label"/>
    </View>
</Alloy>

V1.js
$b1.addEventListener('click', function() {
    var view = Alloy.createController("V2").getView();
    $.main_window.remove(v1);
    $.main_window.add(view);
});
V2.js
$.b2.addEventListener('click', function(){
   var view = Alloy.createController("V3").getView();
   //Add this view to main_window
});
  1. 当您创建V2控制器时,您必须将参考传递到V1中创建的窗口:

    V1.js

    $b1.addEventListener('click', function() {
        var view = Alloy.createController("V2", { main_window: $.main_window }).getView();
        $.main_window.remove(v1);
        $.main_window.add(view);
    });
    

    V2.js

    var args = arguments[0] || {};
    var main_window = args.main_window;
    $.b2.addEventListener('click', function(){
       var view = Alloy.createController("V3").getView();
       main_window.add(view);
    });
    
  2. 或者您可以只创建一个事件侦听器并将其作为参数传递:

    V1.js

    var currentView;
    var replaceViews = function(view) {
        currentView && $.main_window.remove(currentView);
        $.main_window.add(view);
        currentView = view;
    }
    $.b1.addEventListener('click', function() {
        var view = Alloy.createController('V2', { delegate: replaceViews }).getView();
        replaceViews(view);
    });
    

    V2.js

    var args = arguments[0] || {};
    var replaceViews = args.delegate;
    $.b2.addEventListener('click', function() {
        var view = Alloy.createController('V3').getView();
        replaceViews(view);
    });
    
  3. 最后一个选项是设置$。main_window转换为Alloy。

在这里你可以阅读更多关于传递参数给Alloy Controller和Alloy. globals的信息。