外部访问使用createController创建的视图元素并添加到另一个视图

时间:2017-07-16 17:19:29

标签: appcelerator appcelerator-alloy

我有问题。 有一个视图 row.xml

<Alloy>
     <View>
         <Switch id = "search_switch" bindId = "search_switch" />
         <Label id = "search_switch_label" />
     </ View>
</Alloy>

和MAIN视图

<View id = "general" bindId = "general ">
  <Label id = "testLabel" />
</View>

当我添加

var control = Alloy.createController ('row');
Control.search_switch_label.text = 'TEST';
$.parent.add (control.getView());

所有内容都完美添加,但是如何访问search_switch的方法和属性?

$ .search_switch - 说“undefined”!!!

$ .testLabel.text ='1234567890'; - 一切OK!

2 个答案:

答案 0 :(得分:0)

主视图中,如果您尝试获取row.xml的方法,那么您有两种基本方法可以做到这一点:

  

1)使用导出(在row.js

var init = function (){
    // some code here
}

exports.getInit = init;
  

2)使用Alloy.Globals(row.js

Alloy.Globals.init = function(){
    // some code here
}

现在要在主视图中访问init函数,您必须分别执行以下操作:

  

1)访问导出功能(在MainView.js

var control = Alloy.createController ('row');
control.getInit();   
  

2)访问Alloy.Globals函数(在MainView.js

var control = Alloy.createController ('row');

if(Alloy.Globals.init)
    Alloy.Globals.init();

好运&amp;干杯

答案 1 :(得分:0)

根据您的代码,第一件事就是当您使用$时,这意味着您正在访问当前控制器的控件,因此您不能仅使用$ sign来使用其他控制器的控件。在您的情况下,您需要在row.js文件中设置引用,以便您可以访问该控件或其他控制器中的任何变量或函数。

您需要执行与search_switch_label相同的操作。您可以通过main.js中的控件对象访问search_switch对象,如

control.search_switch.value