我想知道使用Backbone.js(或其他MV * JS框架)的最佳方法是什么,而无需将整个应用程序重写为单页应用程序。我只是想用JS和我的API处理我的CRUD操作,但保留旧的导航链接。
如果用户导航到/场地,他可以在不离开页面的情况下进行与场地相关的CRUD。
我想这就像拥有很多SPA。
我如何模块化Backbone(或任何其他JS框架),以便我只能在每个页面上触发我需要的模块。
非常感谢你的帮助。
答案 0 :(得分:2)
我在很多不同的情况下使用这样的骨干。我结束了:
之后,只需写一些javascript!
答案 1 :(得分:1)
我使用的方法类似于@dormisher。
使用模型,视图等的占位符对象创建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({ ... });
然后,假设您有一个仅在您希望FirstApp运行时加载的js文件,只需致电MyApplication.initFirstApp()
。
(当然,您也可以按应用程序组织Backbone构造,如@dormisher的代码示例所示,并为每个构建一个init
或start
方法。)
另一种选择是拥有一个可以在每个Backbone驱动的页面上实例化的公共路由器,如果当前url与定义的路由匹配,Backbone将自动接管。如果每个页面只有一条路线(即每个应用程序都是SPA且没有子路径),我建议您只使用这种方法。
答案 2 :(得分:0)
我在一些应用程序中使用过这种方法,我现在正在重写站点的一部分,并为站点的每个主导航部分创建了许多小型骨干应用程序。
看起来很明显,但我所做的只是每个部分都有一个脚本文件。因此,对于网站的用户部分,我简单地有一个名为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
}
}
很简单,但你知道旧的axim:Keep It Simple Stupid!