0

我想知道在不将整个应用程序重写为单页应用程序的情况下,使用 Backbone.js(或其他 MV* JS 框架)的最佳方法是什么。我只想用 JS 和我的 API 处理我的 CRUD 操作,但保留我的旧导航链接。

如果用户导航到 /venues,他可以在不离开页面的情况下执行与场所相关的 CRUD。

我想这就像有很多SPA。

我如何模块化 Backbone(或任何其他 JS 框架),以便在每个页面上只触发我需要的模块。

非常感谢你的帮助。

4

3 回答 3

2

我在很多不同的情况下都使用这样的骨干。我最终:

  • 忽略路由器
  • 视图和模块只是带有一些内置有用方法的 JS 字典
  • 集合是增强的数组

之后,只需编写一些javascript!

于 2013-02-19T20:30:40.813 回答
1

我使用了类似于@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({ ... });

然后,假设您有一个仅在您希望 FirstApp 运行时加载的 js 文件,只需调用MyApplication.initFirstApp().

(当然,您也可以按应用程序组织 Backbone 构造,如 @dormisher 的代码示例所示,并为每个构造提供initorstart方法。)

选项 2

另一种选择是拥有一个通用路由器,您可以在每个 Backbone 驱动的页面上实例化它,如果当前 url 与定义的路由匹配,Backbone 将自动接管。如果每个页面只有一个路由(即每个应用程序都是一个 SPA 并且没有子路由),我建议您只使用这种方法。

于 2013-02-19T20:19:34.530 回答
0

我在一些应用程序中使用了这种方法,目前我正在重写网站的一部分,并为网站的每个主要导航部分创建许多小型骨干应用程序。

这似乎很明显,但我所做的只是每个部分都有一个脚本文件。因此,对于站点的用户部分,我简单地有一个名为 的 js 文件users.js,其中包含我用于此部分的所有视图/模型/路由器等。共享的任何内容,例如基本视图或与文件一起包含在共享 js 文件中的任何内容users.js。这样,所有内容都保存在一起并且易于查找,并且您只需在页面加载时向服务器发出几个请求。

为了改进组织,我还将所有内容存储在类似名称空间的 JSON 对象中,因此我创建了一个全局 JSON 对象,如下所示:

var MyApplication = {
  Users: {
    Views: {}, // all backbone views go in here
    Models: {} // all models go here
    // routers etc
  }
}

真的很简单,但你知道古老的格言:保持简单愚蠢!

于 2013-02-19T16:15:28.620 回答