2

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

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

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

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

4

2 回答 2

1

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

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

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

于 2012-04-16T15:58:10.550 回答
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 没有全局命名空间污染,但这并不能阻止您像传递全局对象一样传递这样的对象。希望这能澄清一点!

于 2012-04-28T13:11:17.613 回答