Javascript 在RequireJS中注册许多对象
我有一个模型,在浏览器和服务器中都应该具有相同的结构和行为。为了能够重用代码,我选择了NodeJS。我认为这并不是一项微不足道的任务,但多亏了现在,我才能够编写通用代码 我在尝试序列化模型时遇到了一个问题。每一类对象都应该有自己的ID(比如Javascript 在RequireJS中注册许多对象,javascript,requirejs,Javascript,Requirejs,我有一个模型,在浏览器和服务器中都应该具有相同的结构和行为。为了能够重用代码,我选择了NodeJS。我认为这并不是一项微不足道的任务,但多亏了现在,我才能够编写通用代码 我在尝试序列化模型时遇到了一个问题。每一类对象都应该有自己的ID(比如a.b.C),所以当对象被序列化时,这个ID会被添加到JSON中,然后用于创建空对象以将其反序列化 这意味着当我们得到JSON时,我们需要获取ID,然后通过它找到模块,然后创建空对象并填充它。所以,我们需要有模块ID和模块的映射。将其命名为“注册” 寄存器需要
a.b.C
),所以当对象被序列化时,这个ID会被添加到JSON中,然后用于创建空对象以将其反序列化
这意味着当我们得到JSON时,我们需要获取ID,然后通过它找到模块,然后创建空对象并填充它。所以,我们需要有模块ID和模块的映射。将其命名为“注册”
寄存器需要初始化。为此,我们需要在序列化开始之前加载所有依赖项。如果我们采用常规的RequireJS方式,它将看起来像:
define([
"odm/model/core/serializing/Person",
"odm/model/core/serializing/Man"
],
function (require, Person, Man) {
var register = {
_name_cls:{},
_cls_name:{}
};
register.register = function (names) {
for (var i = 0; i < names.length; i++) {
var name = names[i];
var cls = require(name);
register._name_cls[name] = cls;
register._cls_name[cls] = name;
}
};
register.byName = function (name) {
return register._name_cls[name];
};
register.byCls = function (name) {
return register._cls_name[name];
};
register.register([
"odm/model/core/serializing/Person",
"odm/model/core/serializing/Man"
]);
return register;
});
定义([
“odm/model/core/serialization/Person”,
“odm/model/core/serialization/Man”
],
功能(需要、人、人){
变量寄存器={
_name_cls:{},
_cls_名称:{}
};
register.register=函数(名称){
对于(var i=0;i
如您所见,要注册新对象,我们需要手动将其添加到register中的3个位置-链接到模块、函数参数中的模块作为参数以及register(names)函数的模块作为参数
有没有更简单的注册对象的方法?我想将注册模块与要注册的其他模块分开: register.js:
define(function (require) {
var register = {
_name_cls:{},
_cls_name:{}
};
register.register = function (names) {
for (var i = 0; i < names.length; i++) {
var name = names[i];
var cls = require(name);
register._name_cls[name] = cls;
register._cls_name[cls] = name;
}
};
register.byName = function (name) {
return register._name_cls[name];
};
register.byCls = function (name) {
return register._cls_name[name];
};
return register;
});
define(["register", "odm/model/core/serializing/Person", "odm/model/core/serializing/Man"], function (register) {
var modules = Array.prototype.slice.call(arguments, 1);
register.register(modules);
});