ExtJS自定义组件中的事件传递问题

2019-03-25 13:38|来源: 网路

我用到了一个自定义的combotree组件(ExtJS 4.0),如下
Ext.define("Ext.ux.comboboxtree", {
  extend: "Ext.form.field.Picker",
  requires: ["Ext.tree.Panel"],
  alias: 'widget.combotree',
  "initComponent": function() {
    var self = this;
    Ext.apply(self, {
      fieldLabel: self.fieldLabel,
      labelWidth: self.labelWidth,
      store: self.store
    });
    self.callParent();
  },
  "createPicker": function() {
    var self = this;
    var store = this.store;
    self.picker = new Ext.tree.Panel({
      height: 150,
      autoScroll: true,
      floating: true,
      focusOnToFront: true,
      shadow: true,
      ownerCt: this.ownerCt,
      useArrows: true,
      store: store,
      rootVisible: false,
      resizable: true
    });
    self.picker.on({
      "itemdblclick": function(combotree, rec){
        if(rec.get('leaf')){
          self.setRawValue(rec.get('id'));
          self.setValue(rec.get('text'));
          self.picker.hide();
          //我想在这里做点什么,以供调用此combotree的“外部”位置使用,但我不知道该怎么做……
        }
      }
    });
    return self.picker;
  },
  "alignPicker": function() {
    var me = this, picker, isAbove, aboveSfx = '-above';
    if (this.isExpanded) {
      picker = me.getPicker();
      if (me.matchFieldWidth) {
        picker.setWidth(me.bodyEl.getWidth());
      }
      if (picker.isFloating()) {
        picker.alignTo(me.inputEl, "", me.pickerOffset);// ""->tl
        isAbove = picker.el.getY() < me.inputEl.getY();
        me.bodyEl[isAbove ? 'addCls' : 'removeCls'](me.openCls
          + aboveSfx);
        picker.el[isAbove ? 'addCls' : 'removeCls'](picker.baseCls
          + aboveSfx);
      }
    }
  }
});


页面里我具体想做的事是这样:
      {
        fieldLabel: '生产厂家',
        name: 'producer',
        id: 'producer',
        xtype: 'combotree',
        store: store
//我想这里选择一个值的时候,也就是上面combotree里的itemdblclick的时候,给下面这个combotree“销售厂家”也赋某一个值
      },{
        fieldLabel: '销售厂家',
        name: 'vendor',
        id: 'vendor',
        xtype: 'combotree',
        store: store
      }

但我实在是不太明白这里的传递关系……

问题补充:
clue 写道
也就是组件之间进行联动吧?
你可以将它们定义为局部变量,再放入items中,联动逻辑就不用写在组件内了。

假定前面的conbotree选中值后会有change事件(如果没有,你也可以自己定义并发出事件)

// 假设你是扩展的组件,在initComponent中初始化items的
initComponent : function(){
   ...
   var field1, field2;
   field1 = new XXX();
   field2 = new XXX();
   field1.on("change", function(){
      field2.setValue(field1.getValue());
   });
   this.items = [field1, field2]
   ...
}

不好意思,我还是不太明白……
你这个field1和field2是什么呢?两个自定义的combotree组件?
可是我只是想知道在我第一段注释那里写点什么才能让第二段注释那里接收到它的消息……
可能是我问题表达得太晕而导致您没看懂?可是我真的是困惑到只能表达成这样了,见谅…………

相关问答

更多