如何正确初始化对象并从干净的石板开始?

时间:2014-08-15 01:22:18

标签: javascript extjs extjs4

我上过这堂课:

Ext.define('Customer_Portal_UI.FormParameters', {
constructor: function (c) {
    Ext.each(this.ParticipantFormParameters, function (field) {
        if (field.toFieldSet != null) {
            var fieldSetName = c.targetFieldSetPrefix + field.toFieldSet;
            field.toFieldSet = fieldSetName;
        }
    });
},
ParticipantFormParameters: [
    { name: 'service_executive_account_Number', visible: false },
    { name: 'firstname', visible: true, displayText: 'Firstname', toFieldSet: 'GeneralInfoFS', allowBlank: false },
    { name: 'lastname', visible: true, displayText: 'Lastname', toFieldSet: 'GeneralInfoFS', allowBlank: false },
    { name: 'gendercode', visible: true, hasCheckbox: true, displayText: 'Gender', toFieldSet: 'GeneralInfoFS', xtype: 'combo', allowBlank: false },
]
});

如果我这样做一次:

var formParams = Ext.create(Customer_Portal_UI.FormParameters, { targetFieldSetPrefix: 'add' });
console.log(formParams.ParticipantFormParameters[0].toFieldSet);

我会得到addGeneralInfoFS

但如果我多次创建此对象,我将获得addGeneralInfoFS, addaddGeneralInfoFS, addaddaddGeneralInfoFS

这里发生了什么?我试过了delete formParams,但是当我再次初始化一个对象时,如果再次出现同样的问题,那就相同了。

是ExtJS还是javascript问题?我觉得很奇怪我需要努力简单地摧毁物体......

编辑:啊!我在documentation

中找到了这个
  

当在原型的原型中放置物品时,它们将是   在所有类的实例中共享。除非你特别想要   要做到这一点,你应该只把"原始"原型内部的类型   定义

现在的问题是如何在没有它们的情况下声明成员"在原型中#34; ?这很好,但ParticipantFormParameters到底在哪里呢?我不希望它在配置中导致它变脏,我每次初始化对象时都必须拖动这个巨大的(真正的代码在数组中有更多项)块javascript标记?

我使用这种方法在我的应用程序中重构了一些东西,并且我完全并行化,直到这个工作......我无法重构......

谢谢。

1 个答案:

答案 0 :(得分:1)

为什么要修改属性?使用两个不同的变量。这可能是解决方案:

 (...)
  Ext.each(this.ParticipantFormParameters, function (field) {
        if (field.toFieldSet != null) {
            var fieldSetName = c.targetFieldSetPrefix + field.toFieldSetRaw;
            field.toFieldSet = fieldSetName;
        }
    });
},
ParticipantFormParameters: [
    { name: 'service_executive_account_Number', visible: false },
    { name: 'firstname', visible: true, displayText: 'Firstname', toFieldSetRaw: 'GeneralInfoFS', allowBlank: false },