使用AMD和Backbone在模块之间共享对象(或状态)的简洁方法

时间:2014-07-03 17:48:10

标签: javascript backbone.js amd thorax.js

我有一个Backbone / AMD应用程序,我想要做的是在应用程序加载时在主模块中获取模型/对象,然后可以访问或能够加载到后续模块中没有重新获取它的开销(它是一个权限模型,因此几乎无处不在)。

这样做有干净的方法吗?

2 个答案:

答案 0 :(得分:2)

简单地使它成为自己的依赖:

define(["backbone", "text!api/v1/user/permissions"],
       function(Backbone, permissionJSON) {
         return new Backbone.Model(JSON.parse(permissionJSON));
});

答案 1 :(得分:1)

如果您需要一个您想保持状态的模块,您可以按照以下步骤进行操作

<强> stateMod.js

require(['jquery', 'lib1','lib2'], function($, l1,l2) {


  var thisVariableHoldsStateBetweenModules = "initValue"

  var thisIsTheAPIOfYourModule = function(newValue) {

    thisVariableHoldsStateBetweenModules = newValue

  }

  var getInternalState = function () {

    return thisVariableHoldsStateBetweenModules 

  }

  return {

     set: thisIsTheAPIOfYourModule,
     get: getInternalState 
  }

}
})

当您需要此模块时,您获得的内容为thisIsAPIOfYourModule,因此您只需使用它来更改thisVariableHoldsStateBetweenModules

<强> otherMod.js

require(['stateMod'], function(stateMod) {

  stateMod.set("Hello world")

})

以及之后的模块 nextMod.js

require(['stateMod'], function(stateMod) {

   stateMod.get() // outputs Hello World

})

requirejs保存从第一次需要时返回的对象,这就是为什么每次需要时都不会重新加载(网络wiise)d3js和jQuery或其他常用库。模块,否则它会很糟糕。

请试一试,让我知道它对你有用。