在Backbone.js应用程序中实现多主题支持

时间:2014-03-18 18:34:01

标签: javascript html templates design-patterns backbone.js

我有一个Backbone.js SmartTV应用程序,可以提供视频点播和直播电视内容。目前正如您所期望的那样 - 顶部导航,子导航和下面的主要内容区域显示给定类别的资产。

+----------------------------------------------------+
|  Top Nav                                           |
|                                                    |
+----------------------------------------------------+
|  Sub Nav                                           |
+----------------------------------------------------+
|  Content                                           |
|  +------+  +------+  +------+  +------+  +------+  |
|  |      |  |      |  |      |  |      |  |      |  |
|  |      |  |      |  |      |  |      |  |      |  |
|  |      |  |      |  |      |  |      |  |      |  |
|  |      |  |      |  |      |  |      |  |      |  |
|  +------+  +------+  +------+  +------+  +------+  |
|  +------+  +------+  +------+  +------+  +------+  |
|  |      |  |      |  |      |  |      |  |      |  |
|  |      |  |      |  |      |  |      |  |      |  |
|  |      |  |      |  |      |  |      |  |      |  |
|  |      |  |      |  |      |  |      |  |      |  |
|  +------+  +------+  +------+  +------+  +------+  |
+----------------------------------------------------+

内容由单独托管的Rails应用程序提供(构成管理方面)。应用程序在启动时向Rails API发出一个大的JSON请求,将所有内容解析为Backbone模型,然后在页面上呈现此内容。然后客户端应用程序定期查询服务器以检查更新。

在某些时候,我需要从管理方面实施主题,以便客户可以标记他们的电视体验。我能想到的最基本的方法是允许管理员从一系列选项(徽标,颜色,大小等)中进行选择。这看起来很容易,因为这些选项可以简单地在初始JSON有效负载中传递给客户端。但问题是他们仍然会被粘在相同的基本布局上。

我真正需要弄清楚的是如何让用户彻底改变布局。例如,将导航移动到屏幕左侧或底部,或根本没有高级导航(只是屏幕上的一组资产)。

我不确定如何在Backbone应用程序中实现这一点,因为这不仅仅是改变CSS。它需要完全不同的远程导航逻辑,完全不同的Backbone视图等等。

我想知道是否有人遇到过与Backbone类似的要求,或者你将如何处理这样的结构。

我的直觉告诉我,我可以按照以下方式重构我的应用程序:

  • 模板/
    • 默认/
      • JS​​ /
      • config.js
      • router.js
      • views /
      • 的HTML /
      • CSS /
    • side_nav /
      • JS​​ /
      • config.js
      • router.js
      • 视图/
      • 的HTML /
      • CSS /
  • 核/
    • 模型/
    • 模块/
    • 的application.js

然而,这似乎接近为每个单独的主题编写一个全新的应用程序,唯一的共享代码在各种模型/模块中。是否有更优雅的方法来解决这个问题?

0 个答案:

没有答案