【问题标题】:Persistent/Accessible BackboneJS Models with RequireJS带有 RequireJS 的持久/可访问的 BackboneJS 模型
【发布时间】:2012-04-13 21:51:07
【问题描述】:

在使用 RequireJS 和 BackboneJS 构建 Web 应用程序时,我正在尝试找出解决问题的“最佳实践”解决方案。

我的应用需要(在启动时或之后不久)清理服务以获取其大部分数据,然后解析该数据。

显然我希望我的模型获取数据并解析它(到多个子模型中),但我有点绊脚石的是如何让我的模型保持持久性。 BackboneJS 让人感觉模型应该使用 View 即时实例化,但这在我的场景中不起作用。

此外,由于 RequireJS 将所​​有内容隔离到全局命名空间之外的模块中,我正在努力解决如何使我的持久模型可用于我的视图 - 我应该只使用单例模式吗?如果是这样,是否有关于如何避免使用 RequireJS 的循环依赖问题的建议?

【问题讨论】:

    标签: javascript model-view-controller backbone.js requirejs


    【解决方案1】:

    我的解决方案是创建一个模块,该模块创建一个简单的对象,我通过 require.js 将它传递给我的所有其他模块。

    例如,创建 yourobject.js 并将其包含在所有模块中。在 yourobject.js 中,只需创建并返回一个对象。

    # coffeescript
    define [], () ->
      YourObj = 
        # you can put all kinds of things in here or just leave it empty
        init: ->
          # i usually put my app init/backbone bootstrapping code 
          # here then call it in the app module
    
      # and return it
      YourObj
    

    然后只需将此模块包含在任何其他模块中,您就可以像使用全局对象一样使用 YourObj(在某种意义上)。您可以将实例化的主干视图保存到它,主干路由器以供将来操作......无论您喜欢什么。

    RequireJS 将所​​有内容隔离到全局命名空间之外的模块中

    只需将 RequireJS 视为为您的代码提供了一个很好的保护伞。 RequireJS 没有全局命名空间污染,但这并不能阻止您像传递全局对象一样传递这样的对象。希望这能把事情弄清楚一点!

    【讨论】:

      【解决方案2】:

      您可以在视图之外创建长寿命模型并将它们传入:

      var view = new MyView({model: theModelInstance});
      

      当你摆脱视图时,你需要记住取消所有可能阻止视图被垃圾收集的事件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-07-20
        • 2015-08-02
        • 2020-03-09
        • 2014-02-11
        • 1970-01-01
        • 2021-03-16
        • 1970-01-01
        相关资源
        最近更新 更多