具有RequireJS的持久/可访问BackboneJS模型

时间:2012-04-13 21:51:08

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

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

我的应用需要(在启动时或很快之后)为大部分数据清理服务,然后解析该数据。

显然,我希望我的模型能够获取数据并将其解析(进入多个子模型),但我磕磕绊绊的是如何让我的模型保持持久性。 BackboneJS让人觉得应该使用View动态实例化模型,但这在我的场景中不起作用。

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

2 个答案:

答案 0 :(得分:1)

您可以在视图外创建长寿命模型并将其传递到:

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

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

答案 1 :(得分: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没有全局名称空间污染,但这并不妨碍你绕过像这样的对象,好像它是一个全局的。希望这可以解决一些问题!