У меня есть модельный класс с множеством переменных Number, которые часто меняются. Все они отправляют свои пользовательские события, поэтому они могут быть привязаны.Переменные кэша в dataprovider
В моем пользовательском интерфейсе несколько экземпляров этого класса объединены в массив ArrayList, который служит в качестве датапараудера для Spark DataGrid. Переменные класса изменяются отлично, поэтому проблема там.
Теперь я хочу изменить цветное форматирование этих чисел (соответствующие метки в gridcoloums, если быть точным) в зависимости от данных, которые поступают, так сказать изменение зеленого цвета, когда новое значение больше, меняется на красный, когда новое значение меньше старого.
Как это сделать? Я хоть о каком-то кешировании старого значения, а затем сравниваю старый и новый. Это способ сделать это, если да, то как? Или есть другой, возможно более простой способ без необходимости кэшировать что-нибудь?
Любая помощь была бы высоко оценена!
Редактировать: На основании примера, данного @ NoobsArePeople2, это мой текущий код. Сначала DataGrid. DataProvider - это ArrayList, который содержит объекты класса myModel.
<s:DataGrid dataProvider="{_listItems}" >
<s:columns>
<s:ArrayList>
<s:GridColumn dataField="change" headerText="Change" itemRenderer="tableCell">
<s:GridColumn dataField="bid" headerText="Bid" itemRenderer="tableCell">
...
</s:DataGrid>
Теперь средство визуализации tableCell;
<s:GridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark" width="100%" height="100%">
<fx:Script>
<![CDATA[
private var previousData:Number;
private var labelColor:uint;
private var _data:Object;
override public function set data(value:Object):void {
previousData = _data;
_data = Number(value);
invalidateProperties();
}
override protected function commitProperties():void {
super.commitProperties();
if(previousData < data) {
labelColor = 0x40c040;
} else if (previousData > data){
labelColor = 0xf05050;
} else
labelColor = 0xc0c0c0;
itemLabel.setStyle("color", labelColor);
itemLabel.text = String(_data);
}
]]>
</fx:Script>
<s:Label id="itemLabel"/>
</s:GridItemRenderer>
Это прекрасно работает до сих пор (в отличие от использования свойства данных, который бросает неопределенную ошибку), однако, при использовании этого самого средство визуализации элементов для нескольких столбцов сетки, он использует одни и то же значение для каждого столбца сетки. Что это значит?
Редактировать: К сожалению, это работает только в том случае, если я напрямую адресую свойство модели, например data.property, чего я не могу сделать. Мне нужен общий рендеринг элементов для всех столбцов.
Thanks @ NoobsArePeople2 Я понимаю, что вы здесь делаете, и в основном это именно то, что я считал нужным. Тем не менее, у меня есть небольшие проблемы с вашим решением (голые со мной здесь, я до сих пор не работал с itemrenderers). Во-первых, значение if (data ==) выдает ошибку «undefined». Во-вторых, объект value будет иметь тип myModel, даже если для поля данных на соответствующем GridColumn установлено значение myModel.change, которое представляет собой Number. Я добавил свой рендерер (на основе вашего кода) к первому вопросу выше. – AlBirdie
Это потому, что в моем образце кода была ошибка. См. Часть, начинающуюся с 'BEGIN EDIT' – NoobsArePeople2
Что-то действительно здесь. Несмотря на то, что в столбцах сетки данных я получаю правильные значения (в том числе обновления) БЕЗ средства рендеринга элементов, простая трассировка на значение, отлитое в Number в рендерере элементов всегда выводит NaN на каждое обновление, которое я действительно не понимаю как правильные цифры отображаются для столбцов в сетке данных без средства рендеринга элементов. – AlBirdie