У меня есть компонент A в моем проекте flex, где люди могут голосовать за своего любимого исполнителя. Кто-то «любит» художника, он обновляется в моей базе данных. Существует также компонент B, который показывает диаграмму самых любимых артистов. Я вызываю данные из базы данных при создании complete в Flex. Проблема в том, что когда человек сначала голосует за исполнителя, он не будет виден в datagrid, пока пользователь не перезагрузит главную страницу (?) Или не откроет все приложение. Поэтому мне было интересно, как я могу обновлять datagrid каждый раз, когда кто-то добавляет голосование в мою базу данных. Теперь я использую кнопку обновления, но это не очень удобно для пользователей. Любая помощь приветствуется!Flex: обновлять datagrid каждый раз, когда добавляется значение (из другого компонента)
ответ
Использование ArrayCollection, вы просто сделать это Привязываемым весь путь через все компоненты
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.events.FlexEvent;
[Bindable]
public var artistData:ArrayCollection = new ArrayCollection([
{artistName : "Paula", artistLikes : "0"},
{artistName : "Bob", artistLikes : "0"},
{artistName : "Arthur", artistLikes : "0"}
]);
]]>
</fx:Script>
<s:layout>
<s:VerticalLayout/>
</s:layout>
<s:DataGrid id="artists" dataProvider="{artistData}" width="100%" height="150">
<s:columns>
<s:ArrayList>
<s:GridColumn dataField="artistName" headerText="Artist Name"/>
<s:GridColumn dataField="artistLikes" headerText="Artist Likes"/>
</s:ArrayList>
</s:columns>
</s:DataGrid>
<components:CompA artistDataInCompA="{artistData}" height="100"/>
<components:CompB artistDataInCompB="{artistData}" height="100"/>
Предположим, вы увеличиваете количество понравившихся вам в com р A (Не забудьте вызвать обновление() на ArrayCollection)
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
[Bindable]
public var artistDataInCompA:ArrayCollection;
protected function button_clickHandler(name:String):void
{
var index:Number = getItemIndexByProperty(artistDataInCompA, "artistName", name);
var numLikes:Number = artistDataInCompA[index].artistLikes;
// Here you update your PHP
// HTTPService...
// and the ArrayCollection that is binded all the way through all components
artistDataInCompA[index].artistLikes = numLikes + 1;
artistDataInCompA.refresh();
}
protected function getItemIndexByProperty(array:ArrayCollection, property:String, value:String):Number
{
for (var i:Number = 0; i < array.length; i++)
{
var obj:Object = Object(array[i])
if (obj[property] == value)
return i;
}
return -1;
}
]]>
</fx:Script>
<s:layout>
<s:VerticalLayout/>
</s:layout>
<s:Button label="Add a like to Paula" click="button_clickHandler('Paula')"/>
<s:Button label="Add a like to Bob" click="button_clickHandler('Bob')"/>
<s:Button label="Add a like to Arthur" click="button_clickHandler('Arthur')"/>
А теперь делать то, что вы должны сделать в вашей компании B
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
[Bindable]
public var artistDataInCompB:ArrayCollection;
]]>
</fx:Script>
<s:layout>
<s:VerticalLayout/>
</s:layout>
<s:Label text="Paula has {artistDataInCompB.getItemAt(0).artistLikes} like(s)"/>
<s:Label text="Bob has {artistDataInCompB.getItemAt(1).artistLikes} like(s)"/>
<s:Label text="Arthur has {artistDataInCompB.getItemAt(2).artistLikes} like(s)"/>
Если вы хотите медленный отклик, вы должны добавить коммуникационную способность к вашему сценарию сценария действия с помощью серверной скриптовой системы, такой как PHP. Если вам нужен ответ в реальном времени, вы должны использовать службу сокетов или веб-службу.
Каждый раз, когда вы голосуете, добавьте эти строки в функцию после того, как вы отправите команду, чтобы добавить еще один голос.
public function voteUpFunction():void
{
// Your Code to Vote up <Enter Code here>
YourDataGridId.dataprovider = null;
//call new listofLikedPersons using conn.call <Enter Code here>
YourDataGridId.dataprovider = listOfLikedPersons;
}
Надеется, что это помогает, скажи мне, если это решает проблему
его простой, вам просто нужно поддерживать одну переменную таймера, и в какой-то момент пусть займет 1 секунду, вам просто нужно обновить dataprovider datagrid.
Желаем приятного дня.
- 1. обновлять значение столбца каждый раз, когда обновление производится в строке
- 2. Попытка усреднить каждый раз, когда что-то добавляется
- 3. Eclipse/Flex: обновлять файл каждый раз при запуске?
- 4. Выполнить метод каждый раз, когда значение изменяется
- 5. Flex/DataGrid: обновлять каждую строку dataProvider изменяется
- 6. Установить значение JSF компонента из другого компонента
- 7. Flex datagrid - определение, когда сетка завершила визуализацию?
- 8. Должен ли AcceptChanges() вызываться каждый раз, когда добавляется новая строка?
- 9. Обновление двойника каждый раз, когда объект добавляется в ArrayList
- 10. Выделение списка Flex DataGrid
- 11. Доступ к компоненту Flex для другого компонента
- 12. Выполнять команды PS каждый раз, когда файл добавляется в папку
- 13. Посещаемый файл: angularJs .appendChild() добавляется каждый раз, когда отображается просмотр.
- 14. Выполнить цикл каждый раз, когда Точка добавляется к ArrayList (Java)
- 15. Выполнение метода каждый раз, когда элемент добавляется в коллекцию
- 16. Добавляется дополнительная запись Sql каждый раз
- 17. Flex DataGrid: изменить значение на основе другого значения?
- 18. mysql_num_rows возвращает нулевое значение каждый раз, когда
- 19. Значение массива переписывается каждый раз, когда java
- 20. reactJs: установить значение одного компонента из другого компонента
- 21. Каждый раз, когда компонент открыт
- 22. Listfragment Каждый раз, когда
- 23. Компонент выходит из другого компонента
- 24. Flex: как вызвать функцию каждый раз, когда вызывается всплывающее окно.
- 25. увеличить значение переменной каждый раз, когда он вызывается из контроллера
- 26. Должен ли я обновлять каждый куки каждый раз?
- 27. Импорт компонента из другого компонента
- 28. Flex: получить видимый размер компонента (Flex 3)
- 29. Инициализация другого реагирующего компонента от другого компонента
- 30. Codeigniter url добавляется каждый клик
Wondefull! спасибо :) –
+1 для обхода проблемы ... но вы должны разрешить айерам самим работать и понимать. Я думаю, что просто обеспечить логику достаточно :) –