【问题标题】:Appcelerator Titanium Alloy MVC: how is '$' useful?Appcelerator 钛合金 MVC:“$”有什么用处?
【发布时间】:2014-02-19 20:43:43
【问题描述】:

框架的设置使您可以同时加载多个视图(以及可能关联的控制器),但我在编写正确的控制器代码时遇到了麻烦,该代码“知道”所有内容在哪里。

Titanium 文档描述了“$”的用法,如下所示:

在视图中具有 id 属性的所有 UI 元素都会自动定义并可作为控制器中以特殊变量 $ 为前缀的属性使用。 $ 是对控制器的引用。 ...要访问外部控制器和视图,请分别使用 Alloy.createController 和 Controller.getView 方法。

Titanium 文档还说通常视图和控制器是成对工作的。

假设我定义了一个包含“后退”按钮的视图,以及另一个作为刷新按钮的视图。关键是这些视图包含相关的控制器,无论我在什么上下文中都需要工作。后退按钮需要始终关闭顶级窗口,刷新按钮需要重新加载主视图的数据,无论“主视图”如何'我在看。

所以我创建了一个主视图,并将这两个视图加载到其中。现在我有 3 个视图控制器在一个上下文中一起工作。逻辑要求后退按钮知道如何关闭其父级,甚至根据您“返回”的位置执行其他操作;刷新按钮显然需要知道如何访问父视图的数据。如果我总是被限制在一个控制器中,我该如何使用“$”来编码?对我来说,当所有 3 个实体都在同一个地方工作时,我加载“外部”控制器或视图是没有意义的。

【问题讨论】:

  • $ 是编码的好捷径。你的问题似乎有点复杂。您能否发布示例代码来展示您尝试对控制器和视图执行的操作?
  • 谢谢丹妮拉。这只是一个普遍的问题,与我的代码无关。我想我只是在问一个有经验的合金开​​发人员会采取什么一般方法。如果他们不使用 $,那对我来说已经足够了。
  • 我在每个控制器中都使用了 $。它允许通过它们的 id 名称访问您的视图并导出可以由另一个控制器调用的公开可用的方法。
  • 那么如果导出的方法中包含$,那么从另一个控制器调用时$指的是什么?
  • 看看下面我的回答。注释不支持更大的代码部分:(

标签: javascript variables titanium titanium-alloy


【解决方案1】:

这是一个如何在不同 Alloy 控制器之间使用 $ 的示例。

index.js:

$.open.addEventListener('click', function() {
    var view = Alloy.createController(view, { title: 'First Title' });
    view.setTitle('Second Title');
});

$.index.open();

view.js:

var args = arguments[0] || {};

$.setTitle = function(title) {
    $.title.text = title;
};

if (args.title) {
    $.setTitle(args.title);
}

当然我假设 index.xml 和 view.xml 存在并且类似于这个:

index.xml:

<Alloy>
    <Window>
        <Button id="open" title="Open New Window" />
    </Window>
</Alloy>

view.xml:

<Alloy>
    <Window>
        <Label id="title">Empty Title</Label>
    </Window>
</Alloy>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-30
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 2017-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多