CheckboxGroup中的项目由于某种原因使用相同的Manager

时间:2011-07-27 13:15:17

标签: javascript extjs extjs4

好的,这是一小段代码(ExtJs 4):

    var TestA = function() {}
    TestA.prototype.createCheckboxes = function() {
    var items = [
        {boxLabel: "A", inputValue: "A", name: "smthng"},
        {boxLabel: "B", inputValue: "B", name: "smthng"}
    ];

    var chgroup = new Ext.form.CheckboxGroup({items:items})
    return chgroup;    
  }

  var a = new TestA().createCheckboxes().items.get(0).getManager();
  var b = new TestA().createCheckboxes().items.get(0).getManager();
  console.log(a, b, a == b)

据我所知,我们正在创建Ext.form.CheckboxGroup的不同实例。然而,检查显示创建的项目使用相同的管理器。这是故意的,我怎么能摆脱这种行为?因为我希望“不同”的复选框组不会相互影响(一个表单上的loadRecords影响另一个)

2 个答案:

答案 0 :(得分:2)

这是故意的。 CheckboxManager是一个单例,只不过是“DOM中所有复选框的集合”,带有一些包装函数

要实现您想要的(一个组中的活动不应影响其他人),您必须确保各个复选框组之间的复选框名称属性不同。

即。如果A组有复选框“smthng”,则B组可以有“smthng else”但不能“smthng”。

(从设计的角度来看也是有道理的,因为如果它们具有相同的名称,则A组中的“smthng”和B组中的“smthng”之间实际上没有区别。)

答案 1 :(得分:1)

试试这个:

  var a = new TestA().createCheckboxes().items.get(0);
  var b = new TestA().createCheckboxes().items.get(0);
  console.log(a, b, a === b);

  var c = new TestA().createCheckboxes().items.length;
  var d = new TestA().createCheckboxes().items.length;
  console.log(c, d);

由于Ext.form.CheckboxManager是一个私有实用程序类,用于管理按名称分组的所有Ext.form.field.Checkbox字段。 (来自ExtJS 4.0.1文档),我认为你不会有任何问题。