【问题标题】:Marionette - Help to understand how the components workMarionette - 帮助了解组件的工作原理
【发布时间】:2014-01-17 13:14:28
【问题描述】:

我正在开发一个相当大的 SPA,我决定为此使用 Backbone。我的应用程序运行良好,包括路由器、页面部分、模板、登录系统和 CRUD 区域。并且有 2 个不同的区域,一些用户可以同时访问这两个区域或只能访问一个区域。在 RequireJS 的帮助下,一切都是模块化的。但是很多东西我不得不自己写,我开始思考是否有更好的方法来做到这一点。

我在 Marionette 上玩了很多,我非常喜欢它如何处理一些问题和任务,比如僵尸视图和将区域附加到布局......仅提及一些。但是很难找出这些组件是如何工作的或它们应该做什么。 最好有一些方向。

我制作了一张思维导图,所以(对某些人来说)更容易理解我的问题:

我理解的事情(如果我遗漏了什么,请纠正我):

  • ItemView 是元素的一小部分,例如 Header 的导航或 Header 的搜索表单
  • Layout 是 ItemViews 的集合:整个“Header”。
  • 区域附加到应用程序本身,并且需要区域参数的布局实例;但它可以直接有一个与之相关的 ItemView。
  • AppRouter 已附加到应用程序。

还有一些我不太了解的东西:

  • 复合视图在这个结构中的什么位置?
  • 我可以用控制器做什么?它究竟应该做什么?是否与应用程序直接相关?我可以将 AppRouter 附加到它吗?

任何帮助都会很棒。感谢您的建议。

【问题讨论】:

  • 你能解释一下“我可以对控制器做什么”的意思吗?
  • @net.uk.sweet 对不起,我的意思是:“我可以用控制器做什么?它到底能做什么?”。我更新了问题。

标签: backbone.js marionette


【解决方案1】:

ItemView 是元素的一小部分,例如 Header 的导航或 Header 的搜索表单

我认为documentation 中的描述更好,但本质上ItemView 是您在Marionette 中的基本视图类型。

ItemView 是表示单个项目的视图。该项目可能是 一个 Backbone.Model 或者可能是一个 Backbone.Collection。不管是哪一个 但是,它将被视为单个项目。

Layout 是 ItemView 的集合:整个“Header”。

LayoutItemViewRegions 的集合的组合。你可以用它来组织各种类型的视图,ItemViewCollectionViewCompositeView,另一个Layout,到一个特定的布局中。 (再次,请参阅documentation)。

复合视图在这个结构中的什么位置?

CompositeView 可以与图表中的ItemView 互换,另请参阅CollectionView。简单来说,ItemView 一般是模型的视觉表示,CollectionView 表示ItemViews 的集合,CompositeView 是两者的组合。

我可以用控制器做什么?它究竟应该做什么?是否与应用程序直接相关?我可以将 AppRouter 附加到它吗?

再次,指documentation

这是一个非常通用的多用途对象,可以服务于许多 在许多不同的场景中扮演不同的角色。

我承认,这对你并没有太大帮助;)。然而,基本用法是作为AppRouter 的代表来实现路由更改时发生的具体逻辑。

【讨论】:

  • 很好,谢谢你的解释,它帮了很多忙。我对控制器特别感兴趣,因为我有一种情况,用户登录后,他有 2 个不同的站点区域,他可以在其中做完全不同的事情。只要我使用 AMD,资源管理是必须的——我不希望 requirejs 将这两个区域的文件包含到 html 头中。如果我有控制器,我可以检查用户权限并重定向到允许他进入的区域。但我不知道 Controller 是否是为了做这种事情而设计的。
  • 我认为您所描述的是控制器的完美用例。路由器会将该路由的处理委托给控制器上的一个方法,该方法可以提供不同的视图,或者根据您的权限逻辑重定向到另一个路由。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-23
  • 2016-08-28
  • 2018-10-06
相关资源
最近更新 更多