【问题标题】:Accessing Form Elements in a view from a different Controller从不同的控制器访问视图中的表单元素
【发布时间】:2016-03-11 17:20:54
【问题描述】:

尝试从我的主控制器更新视图中的标签文本。

我有 1 个控制器:index.js 然后我有 2 个视图:index.xml(适用于 iOS)和 android_index.xml(适用于 android)。

在链接到控制器的视图中,我可以在我的 index.js 文件中访问这样的表单元素

$.formLabel.text = "updated text"

但在另一个视图中,我将控制器存储在一个变量中。这个视图基本上是一个孤儿,因为它没有控制器,我只是右键单击并创建了一个没有控制器的新视图。

var win=Alloy.createController('android_index').getView();

我似乎无法访问我的 index.js 中的表单元素:

win.formLabel.text = "updated text"

当我尝试时它说它是未定义的

对于这个问题的任何帮助将不胜感激!

【问题讨论】:

    标签: javascript appcelerator appcelerator-titanium appcelerator-alloy


    【解决方案1】:

    getView() 方法返回控制器的第一个顶级视图:https://docs.appcelerator.com/platform/latest/#!/api/Alloy.Controller-method-getView

    如果你想访问子视图,你可以这样做:

    var win=Alloy.createController('android_index'); //reference to your controller
    win.formLabel.text = "updated text";
    

    或者这也可以:

    win.getView('formLabel').text = "updated text";
    

    【讨论】:

    • 这些对我不起作用。我收到此错误:未捕获的类型错误:对象 # 没有方法“getView” 1 我不确定我是否解释得很好。只有 1 个控制器 (index.js) 和 2 个视图 (index.xml, android_index.xm)。 android_xml 视图是一个孤儿,因为它没有像 index.js 那样分配控制器(index.js --> index.xml)(没有控制器 --> android_index.xml)。基本上我只是使用: win.add(userLabel);将内容添加到 android 视图中,然后使用 win.open() 将其打开
    • 如果 android_xml 视图没有控制器,我不能访问 android_xml 视图中的 lblUsername 标签吗?
    • @MikeKellogg 您确定您将代码更改为调用Alloy.createController('android_index').formLabel 而不是Alloy.createController('android_index').getView().formLabel?因为这就是你得到的错误似乎表明的。
    • @Fokke-Appcelerator,对不起,我已经删除了该代码。不过这个问题现在已经解决了。我的大部分问题可能是由于不良做法和无知:P
    • 好 ;) 也许您可以接受这个答案,以便问题显示为已回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-18
    • 1970-01-01
    相关资源
    最近更新 更多