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

Clean method of sharing an object (or state) between modules with AMD and Backbone

本文关键字:状态 方法 对象 Backbone AMD 模块 共享 之间 使用      更新时间:2023-09-26

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

是否有一种干净的方法来做这件事?

让它成为自己的依赖项:

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

如果你需要一个你想要保持状态的模块,你可以这样做

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")
})

之后,在module nextMod.js:

require(['stateMod'], function(stateMod) {
   stateMod.get() // outputs Hello World
})

requires保存了第一次需要时返回的对象,这就是为什么每次在模块中需要d3js和jQuery或其他常用库时都不重新加载(网络智能)的原因,否则它将是相当垃圾。

试一试,让我知道它是如何为你工作的。