Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Appcelerator项目中组织JS文件_Javascript_Iphone_Titanium_Appcelerator - Fatal编程技术网

Javascript 如何在Appcelerator项目中组织JS文件

Javascript 如何在Appcelerator项目中组织JS文件,javascript,iphone,titanium,appcelerator,Javascript,Iphone,Titanium,Appcelerator,我最近开始使用Appcelerator的钛合金创建iPhone应用程序。由于应用程序基本上都是JS,我需要一些关于如何组织这个项目的建议 为应用程序中的每个视图创建长程序文件变得非常容易。有没有一种方法可以将MVC或某种结构合并到项目中 谢谢,我很感激。 -Tilo本身本质上就是MVC,因为您的app.js文件是主控制器,您创建的每个视图都是视图,您根据视图传递(或设置)模型数据 在Tianium中,您可以使用两种很好的内置机制分解应用程序: -Titanium.include允许您在适当的位置

我最近开始使用Appcelerator的钛合金创建iPhone应用程序。由于应用程序基本上都是JS,我需要一些关于如何组织这个项目的建议

为应用程序中的每个视图创建长程序文件变得非常容易。有没有一种方法可以将MVC或某种结构合并到项目中

谢谢,我很感激。
-Tilo本身本质上就是MVC,因为您的app.js文件是主控制器,您创建的每个视图都是视图,您根据视图传递(或设置)模型数据

在Tianium中,您可以使用两种很好的内置机制分解应用程序:

  • -Titanium.include允许您在适当的位置包含一个或多个JS文件,就像C
    #include
    编译器指令一样。您可以将公共函数和JS类放在这个文件中,然后在需要导入和可用的地方包含它们

  • -您可以创建一个新视图,作为新窗口的一个属性,通过URL传递到另一个JS上下文,这将创建一个新的JS子上下文,并允许您维护自己的变量空间(但仍然允许您访问您的父级)

  • 此外,在Tianium中,您可以创建文件夹,以便以适合您和您的应用程序的方式对应用程序进行逻辑组织

    编辑:如今,Tianium.Include方法已被弃用。 正如文档中提到的,我们应该创建一个CommonJS模块并使用
    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需要了解它,只需添加到foo
    var bar=require('bar.js'))
    @require:对于require,它应该是
    var bar=require('bar');
    。不要添加