Flex: Как я могу внести изменения в коллекцию ArrayCollection, привязанную к сетке данных в реальном времени? - PullRequest
1 голос
/ 21 февраля 2010

У меня есть ArrayCollection, привязанная к редактируемой DataGrid, другой компонент должен знать, когда изменяется ArrayCollection (в результате изменений в DataGrid), чтобы он также мог обновляться сам, поэтому слушает событие COLLECTION_CHANGE ArrayCollection.

Проблема в том, что DataGrid обновляет ArrayCollection только тогда, когда фокусируется на редактируемой строке потерь. Это не очень хорошо для моего приложения, так как пользователь может редактировать столбец в строке и не щелкать в другом месте таблицы в течение длительного времени (в результате чего строка теряет фукус), поэтому изменения не будут распространяться на другие части приложение.

Как я могу заставить сетку данных информировать ArrayCollection об изменении каждый раз, когда происходит событие keyup в текстовом вводе, а не каждый раз, когда строка теряет фокус?

Приветствия

Chris

Ответы [ 2 ]

1 голос
/ 21 февраля 2010

Я бы добавил обработчик в компонент, используемый для редактирования значения, а не в ArrayCollection. Пример:

<mx:DataGridColumn dataField="name" headerText="Name" itemEditor="{nameEditor}" editorDataField="selectedItem" />

Затем это используется для редактирования значения:

<mx:Component id="nameEditor">
    <mx:ComboBox dataProvider="{outerDocument.names}" change="outerDocument.setNameField(event)" close="outerDocument.setNameField(event)" />
</mx:Component>

А это обработчик события изменения (и закрытия):

public function setDestinationField(event:*):void {
    var destination:String = (event.target as ComboBox).selectedLabel;
    if (destination === '') {
        delete _gridData[_currentlyEditedRowIndex].destination;
    } else {
        _gridData[_currentlyEditedRowIndex].destination = destination;
    }
}

_currentlyEditedRowIndex устанавливается путем добавления этого в сетку:

itemEditBegin="beginEdit(event);"
0 голосов
/ 21 февраля 2010

Спасибо, Габриэль, ты поставил меня на правильный путь. Я опубликую здесь свое окончательное решение на случай, если кому-то еще понадобится сделать то же самое в будущем.

  <mx:DataGridColumn headerText="Title" width="300" dataField="title">
    <mx:itemEditor>
      <mx:Component>
        <mx:TextInput change="data.title = text" />
      </mx:Component>
    </mx:itemEditor>
  </mx:DataGridColumn>

Теперь при каждом изменении текста во входных данных ArrayCollection, используемый в качестве поставщика данных, также обновляется, поэтому другие компоненты прослушивают события COLLECTION_CHANGE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...