由于某种原因,CheckboxGroup中的项使用相同的管理器

Items in CheckboxGroup are for some reason using the same Manager

本文关键字:管理器 CheckboxGroup 由于某种原因      更新时间:2023-09-26

好的,下面是一小段代码(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在一个表单影响另一个)

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

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

。如果A组有复选框" smthing ", B组可以有" smthing else"但不能有" smthing "。

(从设计角度来看,这也是有意义的,因为如果它们具有相同的名称,则A组中的"smthing"和b组中的"smthing"之间实际上没有区别)

试试这个:

  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);

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