Javascript 带Spine.js的真实世界webapp结构

Javascript 带Spine.js的真实世界webapp结构,javascript,model-view-controller,structure,Javascript,Model View Controller,Structure,我使用Spine.js和CoffeeScript研究JavaScript MVC已有相当一段时间了。我开发RubyonRails已经有一段时间了,所以我了解模型、视图和控制器应该分别处理什么(基于我对它的经验)。但是在Rails中,我们已经知道(一般来说)每个控制器基本上是控制一组视图(或页面)的东西,并且一次处理一个或多个模型。(也许吧,如果我错了,请纠正我,因为我还不是职业选手,我必须承认) 然而,我发现在建筑方面,脊椎有一个完全不同的概念。我阅读了它的文档并深入到它的示例应用程序中。不幸的

我使用Spine.js和CoffeeScript研究JavaScript MVC已有相当一段时间了。我开发RubyonRails已经有一段时间了,所以我了解模型、视图和控制器应该分别处理什么(基于我对它的经验)。但是在Rails中,我们已经知道(一般来说)每个控制器基本上是控制一组视图(或页面)的东西,并且一次处理一个或多个模型。(也许吧,如果我错了,请纠正我,因为我还不是职业选手,我必须承认)

然而,我发现在建筑方面,脊椎有一个完全不同的概念。我阅读了它的文档并深入到它的示例应用程序中。不幸的是,所有Spine示例应用程序都展示了如何处理单页应用程序,而现实世界中“更大”的应用程序将不再如此。(如果Spine仅用于“单页应用程序”,请更正我的问题)

假设有一个网站(或应用程序)由许多页面/部分/模块组成,如下所示:

1-主页,显示例如基于缩略图的列表 2-联系人页面 3-当前用户的配置文件管理页面(普通CRUD)

每个页面的主结构(或布局)与标题中的相同,标题中包含指向上述页面的链接、搜索输入字段和注销链接(我已经知道登录页面应该是单独的,所以我不会在这里询问身份验证)

这里棘手的部分是,我真的不知道如何把所有的部分联系在一起,我一直在问自己一些问题,在谷歌和StackOverflow上搜索,但没有明确的答案

1-“spine应用程序必须”仅在一个页面中?我的意思是,有固定的页眉和页脚,但有一个动态内容DIV,它根据用户单击页眉的哪个选项卡加载和卸载视图?或者我应该将每个页面视为一个独立的spine应用程序

2-我是否在一个页面中有多个控制器?例如,应用程序主控制器和导航控制器(标题)

3-是否每个控制器都应该处理一个模型,或与之相关的模型?(在示例中,它们之间始终存在1:1的关系,如任务模型和任务控制器)

4-在我的应用程序中,我应该在哪里存储接口相关的状态变量。我应该创建一个“记住”当前用户的模型,或者例如突出显示哪个选项卡以供进一步参考?或者我应该将它们存储到控制器中吗

5-如果它是一个单页应用程序(但是有很多部分或模块),我应该为这个页面中的每个加载部分都配备一个控制器吗

我知道这些对于更有经验的程序员来说可能是微不足道的问题,但我真的不知道从哪里开始。因此,如果有人能引导我走上正确的轨道,那就太棒了

提前谢谢


我认为这是一个很好的问题。我的回答很宽泛,所以请容忍我

我的回答的实质是,您需要熟悉其他框架,以便了解您选择的框架试图解决的问题。你的问题是可以理解的。另一些人一直在为缺乏一种“适当”的方式来做一些普通的事情而挣扎。根据示例、包装器/扩展和替代框架创建了解决方案。也许,你应该寻找与Spine相关的信息,它启发了Spine,并且仍然与Spine相似

正如您所说,您熟悉Rails的MVC。然后是Spine的MVC方法,这是完全不同的。这应该给你一个提示,MVC(或通常的MV*是一个广泛的概念)有着非常不同的实现。好的,您可能会认为Rails毕竟是一个基于请求的服务器端框架,而Spine是一个基于客户端事件的框架,所以这种差异是可以理解的。嗯,客户端JavaScript框架之间也没有统一性。例如,所提到的主干具有所谓的视图,它们实际上扮演控制器的角色。所以我猜Spine的创建者做的一件事就是为了清晰起见将视图重命名为控制器。JavaScript的MV*详细解释如下。还有很多JavaScript框架

所以脊椎和脊骨的一个“问题”是它们不支配任何架构。换句话说,他们不够固执己见。你可以随心所欲地使用它们,这一事实让你感到沮丧。下面我尝试回答您的问题:

  • 对于Spine,应用程序不需要是单页应用程序(SPA) 您可以创建一个具有多个页面的应用程序,每个页面都加载自己的控制器。在这种情况下,可以在服务器上呈现视图,并且可以从生成的JavaScript引导模型。当您不需要SPA,但仍然希望组织JavaScript或具有一些可重用组件时,这是很好的

    但是,从脊椎的特征集(例如路线)判断,它是在考虑SPA的情况下创建的

  • 一般来说,对于SPA和复杂UI,最好将UI(小部件)的各个部分分开。在脊椎中,控制器是这种分离的手段。因此,可以使用多个控制器并使用控制器嵌套。也许,应该有一个最顶级的应用程序控制器

  • 这是不正确的(没有技术限制),尽管这使事情变得更容易

  • 将这些变量存储在相应级别的控制器中。如果需要观察这些值,则将其存储为模型,否则将其存储为控制器属性

  • 您可以有一个应用程序控制器,它包含页眉、页脚、侧边栏控制器和活动页面。在Routes中,您创建一个相应的控制器并将其传递给App controller,后者将主区域内容替换为该控制器的元素。这是一种可能的方法

  • 再次:

    人们一直在努力解决主干/脊椎应用程序架构缺乏具体性的问题。他们创造了一些解决方案