添加视图以打开钛金属窗口

时间:2014-06-20 04:53:19

标签: javascript iphone xml model-view-controller titanium

我有3个视图:v1.xml,v2.xml,v3.xml。 v1.xml有一个按钮B1。当用户单击按钮B1时,它将打开v2.xml。 v2.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 个答案:

答案 0 :(得分:2)

  1. 在创建V2控制器时,必须将referance传递给在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.Globals并创建全局函数。

  4. 您可以在此处详细了解passing arguments to Alloy ControllerAlloy.Globals