【发布时间】:2012-10-30 16:01:11
【问题描述】:
我最近一直在使用主干作为我的客户端框架。在我使用 Express.js 的服务器上。 尽管如此,我还是在阅读 Meteor 并意识到它是一个相当有趣的“全栈”框架。
Backbone 和 Meteor 的用法是互补的,还是和 Meteor 可以合二为一 干脆放弃 Backbone(或任何其他 MV*)?
【问题讨论】:
标签: javascript backbone.js meteor
我最近一直在使用主干作为我的客户端框架。在我使用 Express.js 的服务器上。 尽管如此,我还是在阅读 Meteor 并意识到它是一个相当有趣的“全栈”框架。
Backbone 和 Meteor 的用法是互补的,还是和 Meteor 可以合二为一 干脆放弃 Backbone(或任何其他 MV*)?
【问题讨论】:
标签: javascript backbone.js meteor
有一个名为meteor-router 的现有陨石智能包。也许它可以帮助您迁移现有的主干代码。
【讨论】:
没错。 Meteor 的不同部分,如 Meteor.Collection(也适用于客户端的 Mongo 数据库 API)和 Template(数据更改时自动重绘的 Handlebars 样式模板)一起工作。因此,每当一个用户进行更改时,所有其他允许访问该数据的选项卡都会自动重绘。如果您正在使用它们,那么您不需要在客户端上使用单独的库(如骨干网)。
Backbone 是为早期风格的应用程序构建的,您可以使用不同的 API 编写单独的客户端和服务器代码。在该模型中,服务器端公开了一个 REST API,主干的工作是在客户端上提供一些结构,以便如何查询该 API 并根据返回的数据绘制屏幕。但是在你有一个实时应用程序之前,你仍然需要手动编写所有的数据同步和模型验证代码,而且你必须这样做两次:一次在客户端,一次在服务器上。
有一个例外:我们中的许多人确实在 Meteor 应用程序中使用骨干网的路由器。下面的代码来自Todo List example。
////////// Tracking selected list in URL //////////
var TodosRouter = Backbone.Router.extend({
routes: {
":list_id": "main"
},
main: function (list_id) {
Session.set("list_id", list_id);
Session.set("tag_filter", null);
},
setList: function (list_id) {
this.navigate(list_id, true);
}
});
Router = new TodosRouter;
Meteor.startup(function () {
Backbone.history.start({pushState: true});
});
【讨论】: