gpt4 book ai didi

javascript - 如何从 DOM 元素获取 Ext JS 组件

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:04:40 25 4
gpt4 key购买 nike

尝试创建内联编辑表单。我有一个看起来像这样的表格:

var editPic = "<img src='https://s3.amazonaws.com/bzimages/pencil.png' alt='edit' height='24' width='24' style='margin-left: 10px;'/>";
var submitPic = "<img id='submitPic' src='https://s3.amazonaws.com/bzimages/submitPic.png' alt='edit' height='24' width='24'/>";

Ext.define('BM.view.test.Edit', {
extend: 'Ext.form.Panel',
alias: 'widget.test-edit',

layout: 'anchor',
title: 'Edit Test',
defaultType: 'displayfield',

items: [
{name: 'id', hidden: true},

{
name: 'name',
fieldLabel: 'Name',
afterSubTpl: editPic,
cls: 'editable'
},
{
name: 'nameEdit',
fieldLabel: 'Name',
xtype: 'textfield',
hidden: true,
cls: 'editMode',
allowBlank: false,
afterSubTpl: submitPic
}
]
});

Controller 看起来像这样(很多事件):

init: function() {
this.control({
'test-edit > displayfield': {
afterrender: this.showEditable
},
'test-edit': {
afterrender: this.formRendered
},
'test-edit > field[cls=editMode]': {
specialkey: this.editField,
blur: this.outOfFocus
}
});
},

outOfFocus: function(field, event) {
console.log('Lost focus');
this.revertToDisplayField(field);
},

revertToDisplayField: function(field) {
field.previousNode().show();
field.hide();
},

formRendered: function(form) {
Ext.get('submitPic').on('click', function (event, object) {
var field = Ext.get(object).parent().parent().parent().parent();
var cmp = Ext.ComponentQuery.query('test-edit > field[cls=editMode]');
});
},

editField: function(field, e) {
var value = field.value;
if (e.getKey() === e.ENTER) {
if (!field.allowBlank && Ext.isEmpty(value)){
console.log('Not permitted!');
} else {
var record = Ext.ComponentQuery.query('test-edit')[0].getForm().getRecord();
Ext.Ajax.request({
url: '../webapp/tests/update',
method:'Post',
params: {
id: record.getId(),
fieldName: field.name,
fieldValue: field.value
},
store: record.store,
success: function(response, t){
field.previousNode().setValue(value);
t.store.reload();
var text = response.responseText;
// process server response here
console.log('Update successful!');
}
});

}
this.revertToDisplayField(field);

} else if (e.getKey() === e.ESC) {
console.log('gave up');
this.revertToDisplayField(field);
}
},

showEditable: function(df) {
df.getEl().on("click", handleClick, this, df);

function handleClick(e, t, df){
e.preventDefault();
var editable = df.nextNode();
editable.setValue(df.getValue());
editable.show();
editable.focus();
df.hide();
}
},

我正在使用“afterSubTpl”配置来添加编辑图标和接受图标。我设置了监听器来监听与它们相关的点击事件,但是在单击它们之后,我只有 Ext.get('submitPic') 创建的元素。现在我想访问 Ext 字段和围绕它的表单。父方法只带回其他 DOM 元素。我如何连接它们?你可以看到我在 formRendered 中尝试了什么。

我希望有人能为我澄清这一点。

最佳答案

沿着 DOM 树向上走,直到找到元素 id 的组件:

 getCmpFromEl = function(el) {
var body = Ext.getBody();
var cmp;
do {
cmp = Ext.getCmp(el.id);
el = el.parentNode;
} while (!cmp && el !== body);
return cmp;
}

Ext.Component.from(el) 从 ExtJS 6.5.0 开始就是这样做的,正如我刚刚了解到的那样。 Doc Source

关于javascript - 如何从 DOM 元素获取 Ext JS 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12133377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com