гибкие множественные коллекции массивов с одним источником данных - PullRequest
1 голос
/ 21 июля 2009

Как я могу заполнить несколько таблиц данных в flex одним источником данных, который фильтруется по-разному для каждой сетки данных.Я назначаю event.result из моего вызова удаленного объекта трем различным коллекциям массивов, каждая из которых имеет свою собственную функцию фильтра.Когда я назначаю и обновляю функции фильтра, они влияют на все коллекции массивов.Таким образом, результаты последнего обновления коллекции массивов попадают во все три блока данных.

Ответы [ 3 ]

3 голосов
/ 21 июля 2009

Возможно, вам нужно использовать ObjectUtil .copy для вашего результата события, чтобы иметь 3 отдельных ArrayCollections, по одному для каждой DataGrid ... в противном случае все они указывают на одно и то же место в памяти одного ArrayCollection и любые изменения сделанное ему будет отражено во всех DataGrids.

var AC1:ArrayCollection = event.result as ArrayCollection;
var AC2:ArrayCollection = ObjectUtil.copy(AC1) as ArrayCollection;
var AC3:ArrayCollection = ObjectUtil.copy(AC1) as ArrayCollection;
2 голосов
/ 21 июля 2009

Я бы сделал копии вашего провайдера данных, то есть:

var myDataArray:Array; // this contains your original data.

dataGrid1.dataProvider = new ArrayCollection(myDataArray.concat()); 

dataGrid2.dataProvider = new ArrayCollection(myDataArray.concat());

dataGrid3.dataProvider = new ArrayCollection(myDataArray.concat());
0 голосов
/ 16 мая 2011

Решения, которые были предоставлены, могут вести себя не так, как хотелось бы.ArrayCollection технически состоит из модели и «представления» в модели.В моем понимании оба предложенных решения создают копию модели.Это означает, что если вы добавите элемент в одну коллекцию ArrayCollection, он не будет отображаться в другой независимо от того, будет ли он соответствовать фильтру ArrayCollection. Обычно вы хотите, чтобы он был частью модели других ArrayCollections, но был видимым только в том случае, если добавленный элемент проходит соответствующий фильтр ArrayCollection.Вы можете поделиться «моделью» среди ArrayCollections, имея отдельные представления в модели, например:

var collection1:ArrayCollection = new ArrayCollection();

var collection2:ArrayCollection = new ArrayCollection();
collection2.list = collection1.list;

var collection3:ArrayCollection = new ArrayCollection();
collection3.list = collection1.list;

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

http://aaronhardy.com/flex/collections-and-chaining-for-separate-presentation/

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