Javascript 如何在Appcelerator项目中组织JS文件
我最近开始使用Appcelerator的钛合金创建iPhone应用程序。由于应用程序基本上都是JS,我需要一些关于如何组织这个项目的建议 为应用程序中的每个视图创建长程序文件变得非常容易。有没有一种方法可以将MVC或某种结构合并到项目中 谢谢,我很感激。Javascript 如何在Appcelerator项目中组织JS文件,javascript,iphone,titanium,appcelerator,Javascript,Iphone,Titanium,Appcelerator,我最近开始使用Appcelerator的钛合金创建iPhone应用程序。由于应用程序基本上都是JS,我需要一些关于如何组织这个项目的建议 为应用程序中的每个视图创建长程序文件变得非常容易。有没有一种方法可以将MVC或某种结构合并到项目中 谢谢,我很感激。 -Tilo本身本质上就是MVC,因为您的app.js文件是主控制器,您创建的每个视图都是视图,您根据视图传递(或设置)模型数据 在Tianium中,您可以使用两种很好的内置机制分解应用程序: -Titanium.include允许您在适当的位置
-Tilo本身本质上就是MVC,因为您的app.js文件是主控制器,您创建的每个视图都是视图,您根据视图传递(或设置)模型数据 在Tianium中,您可以使用两种很好的内置机制分解应用程序:
#include
编译器指令一样。您可以将公共函数和JS类放在这个文件中,然后在需要导入和可用的地方包含它们require()
语句
有关此声明的更多信息:
关于模块的更多信息:这也可能有帮助:如何组织Tianium mobile项目的基本结构:由于我没有为Tianium mobile项目找到合适的MVC解决方案,我提出了以下方法。对于小型应用程序,这可能是过度设计的,但可能有助于维护不断增长的应用程序 文件夹结构:
/Resources
/model
/view
/controller
/ui
/iphone
/android
app.js
app.jss
为了分离视图、模型和控制器,需要一个名称空间,因此我们在app.js中定义它,它是我们的主控制器:
var app = {
view: {},
controller: {},
model: {},
ui: {}
}
在文件夹中,我们为每个组件放置单个JavaScript文件。为此,我们可以使用轻量级JavaScript OOP库,如MooTools或Prototype,或者将简单的JS函数定义为我们的对象。如果您还想从父类继承,那么库肯定是有意义的
示例:
# Resources/controller/MyController.js
app.controller.MyController = function() {
return {
getView: function() {
return new app.view.MyView().getView();
}
}
}
# Resources/view/MyView.js
app.view.MyView = function() {
return {
getView: function() {
return Ti.UI.createWindow({...});
}
}
}
# Resources/view/MyModel.js
app.model.MyModel = function() {
return {
some: "data",
foo: "bar"
}
}
之后,我们可以在app.js文件中使用Ti.include()包含所有需要的模型/视图/控制器类,并使用我们的命名空间引用组件:
Ti.include("controller/MyController.js");
Ti.include("view/MyView.js");
var myController = new app.controller.MyController();
var myView = myController.getView();
myView.open();
MVC方法现在假定控制器“控制”视图的状态,并将数据从模型传递到视图中。视图仅包含用于样式设置的UI元素和属性。在UI中执行的任何操作都会触发一个事件,通知控制器执行所需的操作
但当然,MVC的确切定义可能会根据您的个人喜好有所不同;) Appcelerator似乎在市场上独树一帜,我还没有对此进行评估
更多信息:请允许我更新此问题,因为大多数回答已被取代。2012年第4季度,Appcelerator发布了Alloy MVC(beta版)框架以及最新的IDE和SDK版本Tianium Studio 3.0和SDK 3.0。Alloy与Studio完全集成,因此在不到15分钟的时间内运行一个基本应用程序非常容易。Alloy引入了一个重要的文件夹重组:/app文件夹现在是所有开发代码所在的地方 /Resources文件夹(代码曾经驻留在其中)现在是更新后的/build文件夹。/Resources中的编译代码在每次生成时都会被覆盖 我创建了一个关于创建Alloy项目的简短入门(screencast)。您可以通过我的dropbox文件夹查看它
这里有一个有用的例子,解释了GitHub回购协议中发生的情况。就像您的解决方案一样。用同样的方法做,并且有很好的体验。非常喜欢它,并且非常愿意使用它。我如何在我的应用程序中使用它?我喜欢这个。2014年非合金版本是否仅因使用了require()而不是Ti.include()而有所不同?对于那些延迟检查的人,
Ti.include()
会被折旧。尽管问题仍然相关,请注意,一些答案已经过时了:到目前为止,教程和官方文档中提到了一些模式,甚至好的老示例应用程序KitchenSink(又名鼠巢之王)也进行了重构,以更好地反映当前的良好实践。我同意以下说法:(请忽略我的上述评论,我无法再删除它:/)@jhaynie,我会反驳钛本身本质上就是MVC的说法。在处理所谓的经典钛项目时,几乎没有强制结构。具体来说,没有控制器或模型。你可以提出自己的结构,使其像MVC一样,但经典方法本身不是MVC。钛合金(尽管在您发布答案时未发布)另一方面,它是一个MVC框架。它强制执行特定的项目结构,并提供真正的关注点分离。谢谢!您用这些信息拯救了我。有没有办法将控制器javascript拆分为多个文件,这样就不必是一个长的.js文件?您可以拆分控制器文件吗只要确保在原始容器中“require”它们就可以了。另外,以对您有意义的方式组织它们。如果您将代码从foo.js
拆分为bar.js
并且foo需要了解它,只需添加到foovar bar=require('bar.js'))
@require:对于require,它应该是var bar=require('bar');
。不要添加