2012-02-08 29 views
34

我是Backbone.js的新手。我已经通过了文档。我的问题是 控制器概念在哪里出现?换句话说,Backbone.js中的控制器是什么?Backbone.js中的控制器

听说路由器是控制器。如果是这样,为什么它被认为是一个控制器?我们可以开发简单的基本应用程序吗?在那种情况下,控制器是什么?

回答

39

要在这里清除的东西一点点。路由器不是控制器,它是一种定义客户端路由映射的方法(类似于Rails的routes.rb)。这有助于将客户端页面路由到特定的操作/处理程序。这与控制器在模型和视图之间提供一些编排的工作不同。实际上有多种方法可以使用Backbone来实现这一点。从Backbone's documentation引用:

模型和视图之间的引用可以通过多种方式处理。有些 人喜欢有直接指针,其中图对应1:1 模型(model.view和view.model)。其他人则倾向于使用中间的 “控制器”对象,以便将创建和组织 视图编排到层次结构中。其他人仍然倾向于采用这种方法,而且总是会触发事件而不是直接调用方法。所有这些 款式运作良好。

这带来了三种不同的方法来实现这一点。第一个非常简单,就是将模型对象作为属性包含在视图中。

第二个建议包括执行这种编排角色的第三个组件。我相信这可以在相当大且复杂的应用程序中有所帮助。为此,我鼓励您查看Chaplin,这是一个使用Backbone.js的示例应用程序体系结构。这些人在分离事物方面做了很多工作,并将控制器的概念引入到架构中。

最后一种方法是建议使用事件来标记动作和调解器来处理这些动作。为此,我鼓励您查看调解器和发布/订阅JavaScript模式。

7

它与iOS Cocoa Touch框架的工作方式更类似,您不应该将其想象为后端MVC,骨干团队本身甚至从未在其网站上提及MVC,以避免人们从后端MVC 。在骨干网的视图是所谓iOS中一个视图控制器/ AppController中,通常你的主AppController的将是查看其设置为你的应用程序的主包装通常也将作为一个全球性的发布/订阅系统和控制器为您主要的应用程序逻辑使用。

路由器正是它所说的 - 它将路由转换为一组参数,并将它们传递给应用控制器以找出如何处理它们,加载哪些子视图等(或者如果应用程序不太复杂,它可以加载/直接从路由器级别更改视图) - 它曾经被称为控制器,但它被重命名为(0.5我相信?)以清除这种混淆。

至少这是我们的做法 - 如果选中在野外多教程,你可能已经看到了,当涉及到骨干有许多方法来这是很多开发者也有。这就是Backbone的美丽!在MV * :)

2

通常我会制作我自己的控制器,让路由器做它的事情(捕捉路线并指向控制器动作)。这些控制器是自制的,只是javascript对象和方法。他们接受来自路由器的请求,收集正确的数据(集合,模型...)并采取必要的视图,将它们合并并将数据传递到视图中。

从那里再次骨干。

不过最近我来到了arcoss一个名为backboneMVC的第三方骨干插件。已经阅读它的文档,但还没有尝试自己。

它旨在接管您的路由器并根据您的控制器和您使用它定义的动作制作路线。

看看那个库,但我不能答应什么,因为我还没有自己建立一些东西。