Appcelerator钛 - 合金与经典

时间:2014-09-17 11:45:14

标签: titanium titanium-mobile appcelerator appcelerator-mobile titanium-alloy

我即将开始一个新的Titanium项目。到目前为止,我所写的内容现在被认为是“经典项目”(我从那时起就开始编写Titanium应用程序)。

我想知道在为我的新项目切换到Alloy时是否值得。我知道基本上,在编译到java项目或objective-c项目之前,Alloy编译为“Classic”Titanium代码。我也知道在“预编译”过程中有一个很大的优势,即在合金代码中标记仅与Android或iPhone相关且在编译的“经典”代码中不包括另一个。

我主要担心的是灵活性 - 与“经典”一样,我觉得我可以更好地控制代码以及发生了什么。

第二个问题,我有控件(比如开源滑动菜单)不是为合金编写的 - 我怎样才能将它们作为我项目的一部分?

在找到(在TiConf 2014中引入)TI UX(https://github.com/jaraen/Ti.UX.Templates)后,我开始要求自己使用Alloy,而不是使用Alloy。

其他一些问题:

  1. 如何在Alloy内部运行旧的UI代码?
  2. 我可以在“经典”项目中为Alloy运行编写控件吗?
  3. “Classic”项目是否也可以映射出不属于iOS / Android的代码?
  4. Alloy项目和Classic项目之间的性能有何不同?其他灵活性问题呢?
  5. 谢谢

2 个答案:

答案 0 :(得分:2)

以防有人看到这个问题并需要答案:

我也在Appcelerator Q& A中发布了这个问题,我在这里得到了一些答案:http://developer.appcelerator.com/question/177739/appcelerator-titanium---alloy-vs-classic

我得到的答案是部分的,在这里提出的问题中可以找到更多信息:http://developer.appcelerator.com/question/177542/classic-vs-alloy

答案 1 :(得分:0)

我觉得从经典转向钛合金对我来说是对的。我觉得经典的Titanium开发结构不够,也没有为我提供足够的指导来构建我的应用程序。 Alloy为您的代码提供了MVC结构,但是classic并没有完全阻止您自己滚动或使用具有MVC功能的社区库之一。在这方面,我想我会说使用经典合金更灵活,因为你可以选择如何完成你的结构,而不是适合钛合金的结构。话虽如此,我从未感受到Alloy的限制。

您如何开发Titanium是您的首选。使用Alloy或使用经典没有正确的答案。如果一个人更适合你,请使用它。我觉得Alloy的显示和业务逻辑分离的结构化方法为我提供了一个在开发应用程序时对我有意义的结构。

我没有发现Alloy比传统的柔韧性差。既然您可以在Alloy项目中使用经典代码,那么您可以使用经典的合金中的所有内容。我确信这是一些边缘情况,我还没有碰到,在编写特定类型的应用程序时,可能比另一个更容易。可能是经典不太灵活,因为我不认为你可以在经典应用中使用Alloy。我不相信编译器会知道如何构建它。

每当我评估是否要使用特定技术时,我会制作一系列实验性迷你程序,以确保满足我的应用程序要求的所有功能。如果我认为它不合适或者难以达到这些要求,我就不会使用该技术。例如,当我切换到Alloy时,我确保Ti.Paint库仍然可以工作。如果没有,我仍然会使用经典。

就像经典一样,有合金控制。已经有一个漂亮的基于合金的滑动菜单模块。我使用的是Ti.Paint库,它存在于Alloy之前,不是Alloy特定的模块。

http://gitt.io/是查找Alloy模块/小部件的一个不错的起点。

INDEX.XML

<Alloy>
    <Window id="win">
        <View id="content" />
    </Window>
</Alloy>

1)在index.js文件中,您可以使用经典编码来操作Alloy视图。

index.js

var myview = Ti.UI.createView({
  backgroundColor: 'green'
});
$.content.add(myview);

2)我认为您不能在经典项目中使用Alloy代码。如前所述,它需要对代码进行翻译,而经典项目可能会跳过该过程中的这一步。

3)您是否询问是否可以根据Android或IOS特定的内容包含或删除部分代码?您可以使用在/(Ti.Platform.osname ==“android”)语句之间策略性地放置的include / require语句来执行此操作,以满足您所需的代码。如果代码是针对Android的,则需要这个代码,如果是针对IOS,则需要使用此代码。

4)从未尝试检查经典项目和基于合金的项目之间的性能。我想,既然我转过身来,从未注意到困扰我或我的客户的问题,我从来没有考虑过这个问题。 Alloy完全有可能自动生成在某些情况下较慢的代码。我从来没有注意到它。

我觉得使用Alloy所获得的效率远远超过了直接关注的效果。另外,如果我觉得我不喜欢通过Alloy创建特定控件的方式,我可以使用经典代码并定义该控件本身可以控制经典项目中的定义。