我在combobox
panel
内items
并在select
combobox
内放置了listeners
个事件。 Event函数调用全局方法,但此全局函数在页面加载期间执行。
我在几个类上使用这个组合框选择方法。因此,全局功能将变得容易。因此需要在组合框的项目选择期间使用正常行为。我怎样才能实现这种调整?
全球功能:
Ext.define('MyApp.BaseMethods', {
requires: [],
singleton: true,
// Instead of using method content several times; passing comboname and required JSON value on arguments
comboQuery: function(comboname, JSONValue) {
var query = Ext.ComponentQuery.query(comboname)[0].getSelectedRecord();
var requiredValue = query.get(JSONValue);
return requiredValue;
},
});
和面板:
Ext.define('MyApp.view.FooPanel', {
extend: 'Ext.panel.Panel',
items: [{
xtype: 'foocombo',
listeners: {
// Trying to pass required information through parameters
select: MyApp.BaseMethods.comboQuery('[name=myfoocombo]', 'foojsonvalue'),
scope: me
}
}]
});
运行此方法时;全局函数在button
点击页面加载期间运行,显示FooPanel及其项目,并因为无法选择组合项而给出错误。;
Uncaught TypeError: Cannot read property 'getSelectedRecord' of undefined
答案 0 :(得分:1)
如何延迟?
无需延迟只是需要改变方式。
当您向select
提供函数时,它将调用页面加载或组件创建,而不是这样,您需要调用select
事件函数内部。
我在几个类上使用这个组合框选择方法。因此,全局功能将变得容易。因此需要在组合框的项目选择期间使用正常行为。我怎样才能实现这种调整?
因此,正如您提到我在多个类上使用此组合框选择方法,您可以创建一个公共组件,并且您可以轻松地在该公共组件上获得价值{{3事件。
实施例
{
xtype: 'combobox',
listeners: {
function: select(combo, record, eOpts) {
//you can get easily value here
//{record} With multiSelect false, the value will be a single record. With multiSelect true, the value will be an array of records.
record.get('you json name');
}
}
}
在 select
中,我创建了一个演示版。希望这有助于/指导您实现您的要求。
CODE SNIPPET
Ext.application({
name: 'Fiddle',
launch: function () {
//Common Component
//I'm using this combobox selection method on several classes.
Ext.define('foocombo', {
extend: 'Ext.form.field.ComboBox',
xtype: 'foocombo',
store: {
fields: ['abbr', 'name'],
data: [{
"abbr": "AL",
"name": "Alabama"
}, {
"abbr": "AK",
"name": "Alaska"
}, {
"abbr": "AZ",
"name": "Arizona"
}]
},
fieldLabel: 'Choose State',
queryMode: 'local',
displayField: 'name',
valueField: 'abbr',
JSONValue: 'name',
listeners: {
// Trying to pass required information through parameters
select: function (combo, record) {
//As per simple way
console.log(record.get('name'));
//As per you implement
console.log(MyApp.BaseMethods.comboQuery(`[name=${combo.getName()}]`, combo.JSONValue))
}
}
})
Ext.define('MyApp.BaseMethods', {
singleton: true,
// Instead of using method content several times; passing comboname and required JSON value on arguments
comboQuery: function (comboname, JSONValue) {
var query = Ext.ComponentQuery.query(comboname)[0];
if (query) {
var rec = query.getSelectedRecord();
return rec.get(JSONValue) || null;
}
return null
}
});
Ext.define('MyApp.view.FooPanel', {
extend: 'Ext.panel.Panel',
xtype: 'foopanel',
items: [{
xtype: 'foocombo',
name: 'myfoocombo'
}]
});
Ext.create({
xtype: 'foopanel',
title: 'Demo',
bodyPadding: 10,
renderTo: Ext.getBody()
})
}
});