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

Javascript 在Backbone.js应用程序中实现多主题支持,javascript,html,templates,design-patterns,backbone.js,Javascript,Html,Templates,Design Patterns,Backbone.js,我有一个Backbone.js SmartTV应用程序,可以提供视频点播和直播电视内容。目前的布局与您预期的一样—顶部导航、子导航和下面的主要内容区域显示给定类别的资产 +----------------------------------------------------+ | Top Nav | | |

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

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

在某种程度上,我需要从管理的角度实施主题化,以便客户能够为他们的电视体验树立品牌。我认为最基本的方法是允许管理员从一系列选项(徽标、颜色、尺寸等)中进行选择。这似乎很容易做到,因为这些选项可以简单地在初始JSON负载中传递给客户机。但问题是,它们仍然会粘在相同的基本布局上

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

我甚至不知道如何在主干应用程序中实现这一点,因为这远远超出了更改CSS的范围。它需要完全不同的远程导航逻辑、完全不同的主干视图等等

我想知道是否有人遇到过类似于主干网的需求,或者您将如何构建类似的东西

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

  • 模板/
    • 违约/
      • js/
      • config.js
      • 路由器.js
      • 意见/
      • html/
      • css/
    • 侧导航/
      • js/
      • config.js
      • 路由器.js
      • 观点/
      • html/
      • css/
  • 核心/
    • 模型/
    • 模块/
    • application.js

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

这真的应该是简单地更改css的情况。如果不是这样,那么就有问题了。您可以为用户提供一组预定义的css模板,或者让他们输入自己的模板。这也可以让他们建立自己的品牌。在视觉上,是的,我可以简单地允许更改CSS。但由于这是一款电视应用程序,遥控器导航的逻辑需要根据不同的布局进行更改。