【问题标题】:Add view to open Window in titanium添加视图以在钛中打开窗口
【发布时间】:2014-06-20 04:53:19
【问题描述】:

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

我在 v1.xml 中创建了一个窗口。当我单击按钮 B2 时,我想将视图 v3 添加到现有窗口,并且我不想创建新窗口。我现在在 v2.xml 文件中工作时,无法使用在 v1.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

});

【问题讨论】:

  • 在 V1.js 中,尝试将 $.main_window.add(v2); 更改为 $.main_window.add(view);
  • 哦,是的……这就是我真正拥有的……但这并不能解决我的问题
  • 这还能编译吗?有相当多的错误无法通过 Alloy 预编译阶段。

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


【解决方案1】:
  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.Globals 并创建全局函数。

您可以在此处阅读有关passing arguments to Alloy ControllerAlloy.Globals 的更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多