Работая в ExtJS 3.4, мне нужно показать некоторые значения в нескольких строках (макет формы). Каждая строка выглядит так:
<label> <field> <unit of measure>
Где <unit of measure>
- это DisplayField
с текстом, не редактируемым вручную, указывающим единицу измерения (например, литры, метры, ...).
Мне нужно добавить механизм переключения между единицами измерения, например, кнопка. В идеале я хотел бы нажать эту кнопку, изменить одно значение (или вызвать только один метод установки) и увидеть новое значение в <unit of measure>
частях моего интерфейса. Другими словами, мне бы не хотелось хранить и циклически проходить серию ссылок на несколько DisplayField
объектов.
До сих пор я пытался создать экземпляр и сохранить ссылку на один DisplayField
и вставить его в несколько строк, чтобы я мог вызвать field.setValue(...)
, например:
var dispF = new Ext.form.DisplayField({
value:'liters'
});
var row1 = new Ext.form.CompositeField({
...
items: [<some numberfield 1>, dispF]
...
});
var row2 = new Ext.form.CompositeField({
...
items: [<some numberfield 2>, dispF]
...
});
//Calling this by some means
dispF.setValue('m^3');
Однако dispF
будет отображаться только на последнем экземпляре элемента, который его использует (в данном случае row2
).
Я также попробовал следующее:
var t = 'liters';
var dispF = {
xtype:'displayfield',
value:t
};
var row1 = new Ext.form.CompositeField({
...
items: [<some numberfield 1>, dispF]
...
});
var row2 = new Ext.form.CompositeField({
...
items: [<some numberfield 2>, dispF]
...
});
...
//Calling this by some means
t='m^3';
В этом случае 'litres' отображается в правильном положении для всех строк, но не изменяется на 'm ^ 3'.
Я бы не хотел использовать сетку для этого вопроса.
Обработка каждого поля вручную может быть немного сложной, так как строк много, и на самом деле они могут содержать более одной группы полей и единиц измерения, в то время как хранение их в массивах затруднит чтение кода для всех, кто пришел после (читаемость кода должна учитываться здесь).
Есть ли способ обновить DisplayField в каждой строке с помощью , выполнив только одну операцию (например, присваивание, вызов setValue (), ...), вместо того, чтобы объявлять и создавать экземпляр DisplayField для каждой строки , а затем вызвать setValue () для каждого из них?