相关文章
更多最近更新
更多ExtJS自定义组件中的事件传递问题
2019-03-25 13:38|来源: 网路
我用到了一个自定义的combotree组件(ExtJS 4.0),如下
页面里我具体想做的事是这样:
但我实在是不太明白这里的传递关系……
问题补充:
不好意思,我还是不太明白……
你这个field1和field2是什么呢?两个自定义的combotree组件?
可是我只是想知道在我第一段注释那里写点什么才能让第二段注释那里接收到它的消息……
可能是我问题表达得太晕而导致您没看懂?可是我真的是困惑到只能表达成这样了,见谅…………
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事件(如果没有,你也可以自己定义并发出事件)
你可以将它们定义为局部变量,再放入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组件?
可是我只是想知道在我第一段注释那里写点什么才能让第二段注释那里接收到它的消息……
可能是我问题表达得太晕而导致您没看懂?可是我真的是困惑到只能表达成这样了,见谅…………
相关问答
更多-
SomeCommonUtilityClass win.fireEvent('uploadSuccess'); 自定义事件和侦听器的示例: SomeOtherFileViewController init: function() { this.listen({ // We are using Controller event domain here controller: { // This selector m ...
-
覆盖ExtJS 4的CSS重置,以便在组件中自定义HTML(Overriding ExtJS 4's CSS Reset for custom HTML within components)[2022-04-17]
你可以从extjs css中删除特异性,这样你的css如果包含在之后会“赢”。 所以转换: .x-reset html, .x-reset body, .x-reset div, .x-reset dl, .x-reset dt, .x-reset dd, .x-reset ul, .x-reset ol, .x-reset li, .x-reset h1, .x-reset h2, .x-reset h3, .x-reset h4, .x-reset h5, .x-reset h6, .x-re ... -
extjs 4主题如何使用全局变量来创建自定义组件(extjs 4 themes how to use global variables to create custom components)[2022-08-07]
在.sass文件中,执行如下操作: .my-menu { @include extjs-menu; } 在你的JS代码中,只需将cls: 'my-menu'分配给Ext.menu.Menu。 In you .sass file, do something like this: .my-menu { @include extjs-menu; } In your JS code, just assign cls: 'my-menu' to the Ext.menu.Menu. -
我发现使用面板与Ext.slider垂直方向和一些按钮是可以的解决方案。 I've found that it is ok solution to use panel with Ext.slider vertically oriented and some buttons.
-
extjs 4如何在自定义html中包装容器的子组件?(extjs 4 how to wrap children components of container in custom html?)[2022-03-30]
你已经到了一半:你的子项正在或多或少地渲染,但容器需要一些工作来避免渲染额外的元素。 这里的问题是,对于容器,渲染过程与布局紧密地交织在一起,实际上容器从布局中呈现。 所以你需要稍微捏造一下自动布局: Ext.define('My.view.layout.NavBar', { extend: 'Ext.container.Container', alias: 'widget.navbar', // Not xtype here! defaultType: 'navbaritem ... -
控制器可以听任何东西。 只需要准确指定什么。 但我会在面板级别触发事件 - 将其添加到触发器处理程序中: this.up('panel').fireEvent('triggerclicked'); Controller can listen to anything. Just need to specify exactly what to. But I would fire events on the panel level - add this into your trigger handler: th ...
-
你反过来使用jQuery事件触发系统,所以 Template.myPostItem.events({ 'click .link-action': function (evt, tmpl) { $(evn.target).trigger('post-link-action', this /* extra data */); }, }); 可以在任何父模板中轻松捕获此事件: {{> myPostItem}}
ExtJS中的自定义类属性(custom class property in ExtJS)[2021-12-05]
我个人不喜欢带有额外语法信息的变量名称中的任何内容(Uncle Bob在http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882中将整个部分专门用于此原则),更不用说它产生的丑陋代码(例如mywindow._custom )。 我只是给你的变量描述性名称,然后你的代码会更好地阅读,你不必担心与Ext属性的冲突(如果你担心的话)。 我更喜欢这个: Ext.create("Ext.Window,{ heig ...您遇到的问题应该是在Sencha ExtJS中没有预定义的xtype:'text' 。 请选择textfield , label , container 。 请严格执行代码中的正确缩进,否则很快就会无法读取。 此外,使用最可读的方法进行组件实例化,如下所述: 如果要实例化自定义组件,可以像实例化Sencha组件一样:使用xtype 。 在您定义的组件中,您给该组件一个xtype名称: Ext.define('My.custom.Component',{ xtype:'teilgewerke' 当你 ...像这样的东西: Ext.define('Link', { extend: 'Ext.Component', xtype: 'link', element: { reference: 'element', tag: 'a' }, config: { url: null, hash: null, text: null }, updateUrl: function () { ...