非SPA的JavaScript架构
JavaScript Architecture for non-SPA
我想知道在不将整个应用程序重写为单页应用程序的情况下,使用Backbone.js(或其他MV*js框架)的最佳方法是什么。我只想用JS和API处理我的CRUD操作,但保留我以前的导航链接。
如果用户导航到/场馆,他可以在不离开页面的情况下进行与场馆相关的CRUD。
我想这就像有很多SPA。
如何模块化Backbone(或任何其他JS框架),以便在每个页面上只触发我需要的模块。
非常感谢你的帮助。
我在很多不同的情况下都使用这样的主干。我最终:
- 忽略路由器
- 视图和模块只是JS字典,其中包含一些内置的有用方法
- 集合是增强的数组
之后,只需编写一些javascript!
我使用了一种类似@dormisher的方法。
选项1
为您的模型、视图等创建一个带有占位符对象的MyApplication
对象:
var MyApplication = {
Models: {},
Views: {},
Collections: {},
Routers: {},
initFirstApp: function() {
new MyApplication.Routers.FirstRouter();
Backbone.history.start();
},
initSecondApp: function() {
// similar to above...
}
};
通过扩展MyApplication
对象来定义模型、视图等:
var MyApplication.Routers.FirstRouter = Backbone.Router.extend({ ... });
然后,假设您有一个js文件,它只在您希望FirstApp运行时加载,只需调用MyApplication.initFirstApp()
即可。
(当然,您也可以按应用程序组织主干结构,如@dormisher的代码示例所示,并为每个主干结构提供一个init
或start
方法。)
选项2
另一种选择是有一个通用路由器,你可以在每个主干网驱动的页面上实例化,如果当前url与定义的路由匹配,主干网将自动接管。我建议您只在每个页面只有一条路线的情况下使用这种方法(即,每个应用程序都是SPA,没有子路线)。
我在一些应用程序中使用过这种方法,目前我正在重写网站的一个部分,并为网站的每个主要导航部分创建许多小型骨干应用程序。
这似乎很明显,但我所做的只是为每个部分都有一个单独的脚本文件。因此,对于网站的用户部分,我有一个名为users.js
的js文件,其中包含用于该部分的所有视图/模型/路由器等。与users.js
文件一起包含的共享js文件中包含了任何共享的内容,如基本视图或其他内容。这样,所有的东西都可以放在一起,很容易找到,而且你只需要在页面加载时向服务器发出几个请求。
为了改进组织,我还将所有内容存储在一个类似JSON对象的命名空间中,因此我创建了一个全局JSON对象,如下所示:
var MyApplication = {
Users: {
Views: {}, // all backbone views go in here
Models: {} // all models go here
// routers etc
}
}
真的很简单,但你知道古老的格言:保持简单愚蠢!
- 使用 JavaScript/Node.js 实现插件架构
- 在 CRM 2011 Javascript 中获取架构名称
- Javascript 数据层架构帮助
- JavaScript 代码架构 - 是否使用构造函数
- Javascript中的Webapp客户端架构
- Javascript构造函数、原型和实例化.架构和框架
- JavaScript的命名空间架构
- 使用JavaScript从架构生成XML
- Javascript文字处理器/编辑器(或Google Docs架构)
- 很好的实现了可扩展的JavaScript应用架构(Sandbox by Nicholas Zakas)
- 在可伸缩的javascript架构上放置DOM交互的位置
- 确保javascript前端/REST后端架构网站安全的最佳方法
- JavaScript浏览器端框架/解决方案架构的组件是什么?
- 我的CMS应用程序的Javascript架构
- 如何自动提取Javascript程序的软件架构
- Javascript事件总线架构
- Javascript BlueBird Promises:并发API请求的架构
- 设计模式——单页应用程序的架构(JavaScript)
- Javascript可排序架构设计方法
- JQuery是如何围绕javascript进行架构的