【发布时间】:2010-11-13 08:58:21
【问题描述】:
我有一个 ObjectManager,它包含对所有已创建对象的引用。问题是 ObjectManager 没有引用已创建的对象,而是似乎正在创建它的新实例。任何帮助,将不胜感激。谢谢!
var Fieldset = function (options) {
var fieldset = ($.extend(true, {
id: '',//Let's assume this has been overridden with 'MyFieldset' via the options param.
title: '',
accordion: '',
fields: [],
hidden: false,
Show: function () { $('#' + this.id).show() },
Hide: function () { $('#' + this.id).hide() }
}, options));
if (fieldset.id != null && fieldset.id != '')
ObjectManager.fieldsets[fieldset.id] = fieldset;//Save a reference to this object in the ObjectManager, so I can call ObjectManager.GetFieldset('MyFieldset'). A reference is only saved if an id is provided.
log(ObjectManager.GetFieldset(fieldset.id) == fieldset);//true
return fieldset;
}
编辑:
抱歉,我想我想这样做已经很清楚了。 ObjectManger 没有什么特别之处。它只是为我的每个对象提供了一个属性和 Get 方法。为简单起见,我只包括了 fieldsets 属性和 Getter。我希望这能澄清我的意图。
var ObjectManager =
{
fieldsets: {},
GetFieldset: function (id) { return this.fieldsets[id]; }
};
编辑2:
经过一些测试,我发现了一些奇怪的东西......希望有人可以向我解释为什么会发生这种情况。
var myFieldset = new Fieldset({ id: 'MyFieldset' });
log(myFieldset == ObjectManager.GetFieldset('MyFieldset'));//I just found that it is true in this case...
//... However, this is not the normal way I create Fieldsets... This is:
var editForm = new Form({
dataStore: function () { return ClientsDS; },
id: 'ClientEditForm',
fieldSets: [
new Fieldset({
id: 'ClientDetailsFieldSet',
title: 'Details',
fields: [
new Field({ id: 'ClientID', name: 'ID', property: 'ID', fieldType: 'hidden', value: '0' })
]
})
]
});
log(editForm.fieldSets[0] == ObjectManager.GetFieldset('ClientDetailsFieldSet'));//false
【问题讨论】:
-
您没有说明您希望这段代码做什么,也没有说明它实际在做什么。请澄清。
-
问题中缺少 ObjectManager
-
您的编辑并没有很好地解决问题。目前还不清楚代码实际做了什么以及你期望它做什么。不要让我们猜测。
-
“问题在于 ObjectManager 没有引用已创建的对象,而是似乎正在创建它的新实例。”我认为这很清楚。我正在给你写回复,但决定先做一些测试,这导致了更多细节。我会更新问题。给我一点时间。
-
不清楚,因为您没有向我们展示任何代码(a)实际上向管理器添加了一个字段集,只是一个这样做的函数,但没有显示该函数的调用方式,也没有(b ) 尝试从管理器中检索该字段集的代码,以及它返回的对象而不是您期望的对象。
标签: javascript object reference