Flex4.6 Add element to top of List - list

I've got a spark list that gets dynamically filled.
So far the new items appear at the bottom of the list. What I'd like to do is to add them at the top.
The items in the list have a unique ID so some kind of sorting mechanism would probably do the trick as the new items have a greater ID than the old ones.
What I'd like to avoid is some complex method behind this as I'm working on a mobile platform and the list can get quite big so I need this to be as efficient as possible.
The list's data provider is an ArrayList that gets updated using binding.
How can that be done?
Thanks in advance!

u can Add the items at the starting index of the datagrid. Flex datagrid automatically renew all the indexes and add 1 to all existing element indexes. So
YourDataGridId.dataprovider.addItemAt(item,0) will do.

Related

Polymer - dom-repeat & caching of element data in DOM tree

following scenario:
I have a Firebase database containing a list that is used to create a set of "paper-cards" with dom-repeat:
<template is="dom-repeat" items="{{items}}">
<my-element card="{{item}}">
<paper-card id="{{card.id}}">
...
</paper-card>
</my-element>
</template>
In the UI, the user can add or delete paper-cards, so items also get deleted in Firebase.
Now I realized if I change the CSS of an element (e.g. fadeIn, fadeOut animation) and afterwards delete a card and later add one card, the card still has the CSS state as it was before (e.g. for fadeIn/fadeOut animations).
My questions:
How does DOM repeat deal with elements added or removed? Is not all information of this element "deleted"?
If I delete item #5 (out of 10), what happens to elements 6-10, are they deleted and re-created as "5-9" or "moved/altered"?
Besides CSS, are there any other implications that should be considered inside the template tag? Do I need to manually reset anything?
You can read about the dom-repeat on https://www.polymer-project.org/1.0/docs/api/dom-repeat but what it basically tells you that it tries to be too smart without asking the developer if it wants that behavior. The dom-repeat is heavily flawed because of this.
Polymer is saving performance to doing a dirty check, basically looping through everything and only changing the DOM if the checked values (id, in this case) changes. This means that it will inherit other values.
Basically, it wont update sub-properties. This means that dom-repeat isn't really made for any kind of update.
You can possibly go around this issue by using Polymer's this.splice(). It works like the splice in javascript but sends out an event to dom-repeat to update and where to update. Remember however, that arrays in Javascript are references, so if you take this.items and try to modify it, it will automatically update values the dom-repeat (without updating DOM) and then it will dirty check the update with the new values and not change anything at all. If you want to modify the array in the dom-repeat, then use JSON.parse(JSON.stringify(array) first to get rid of the reference.
Another thing you can do is to use the unique id. If the id changes for that specific card, then hard reset all values and initialize that specific card once again with all it's normal properties (including CSS). That's the workaround I use all the time.
The desperate thing to do, when nothing else works, is to nullify the array that keeps track of the cardset, with this.set('items', []) and then set the property with the new array.
The repeater evaluates the number of items in your array on initialization and stamps that many template instances into the DOM. If you delete an item from your array the repeater is presented with a new array that is one element less, removes the last one and propagates data change to elements' instances.
So if you start with 10 elements and order to delete #5 then element's #6 data is inserted via data-binding into the same DOM node that previously contained #5 data, and so on down the list. The last DOM node for which the updated array contains no data will be removed from the DOM tree.

Storing and retrieving a large list in Ionic 2+

I aim to use the native storage plugin to store a potentially large list of objects in Ionic 3. I want to be able to then display the list in an Ionic infinite scrolling list. I presume that if I save the entire list to storage as a single object, with a single key, it will take quite some time to retrieve it, and the list page will remain empty for some time while the list is read asynchronously from storage.
Should I be saving each item in the list with an individual key, such as "key.1", "key.2", "key.3" etc, and then retrieving a "pageful" of items at a time, supported by the infinite scrolling list? The nuisance part of this is that when I want to add a new item to the list, I have to know what key number I'm up to, so I can generate the next key name.
What's the best practice for this scenario? Is there a better way to load a large list from memory asynchronously so that it can be displayed to the user as soon as possible?
I ended up storing my items in a table in a SQLite database, as I wanted to avoid the size limitations that local storage can impose. I use a query like SELECT * FROM submissions LIMIT ? OFFSET ? to fetch a pageful of items at a time from the doInfinite function of an Ionic infinite scroller, keeping track of what page I'm up to and passing that into the OFFSET parameter. The LIMIT argument is the number of rows to fetch for a page, e.g. 10.

Flex 3 MX List: need to programmatically reorder the list's item renderers

Ok, I have to use Flex 3 because I am using this in an Adobe Connect pod. I have a List component, which is capable of being reordered through drag and drop. If someone leaves the browser and comes back into the meeting room, I am trying to redisplay how they had items ordered from their drag and drop. So I need a way to reorder the list. I was looking into sort for Arrays on the dataProvider. But I have not been able to figure out the proper event to sort the list once, all of the items have the appropriate data in.
In any case, does anyone know how to tell the data of an itemRenderer to have ordered values, and then tell the list to reorder the items in the list according to the new values?
One of the possible ways I used:
Keep your data in Object(map) with key:value, Object{rowIndex:rowData}
e.g. {1 : row1Data,
2 : row2Data, ... }
Prepare the list values based on the keys and then assign it to the grid. This way, Itemrenderer will no longer need to know the "order" of the data. Their task is just to display the data.
Once user is done with drag-drop - update the map, persist it.
Hope this helps.
If you use an ArrayCollection, you can apply a sort, and then call arrayCollection.refersh() to refresh the collections with the sort, which will then update the list display

Add to list within document MongoDB

I have a database where I store player names that belong to people who have certain items.
The items have and IDs, and subIDs.
The way I am currently storing everything is:
Each ID has its own collection
Within the collection there is a document for each subID.
The document for each subID is layed out like so:
{
"itemID":itemID,
"playerNames":[playerName1, playerName2, playerName3]
}
I need to be able to add to the list of playerNames quickly and efficiently.
Thank you!
If I understood your question correctly, you need to add items to the "playerNames" array. You can use one of the following operators:
If the player names array will have unique elements in it, use $addToSet
Otherwise, use $push

MFC CListCtrl updating text of any cell

This question is to understand how to update any row programatically.
Details.
I have a listcrtl, that accepts the data from either from a file or from the edit controls in the dialog. When the items are added I will know its position, that I added, so I can change its subitem texts. I have even implemented the sort functionality in the list, so now the position keeps changing. I have an identifier column for each row, so that I can recognize the row.
Now, from an out side event, if I have to change an other columns value of an ID that I know , I have to first find the position of the item by comparing the id column, then with that position, I have set the subitemtext.
This works fine except that it takes time to find the row first then it need to update the column.
Now, in order to get the row directly, I need some help.
I have gone through
http://msdn.microsoft.com/en-us/library/windows/desktop/hh298346(v=vs.85).aspx
But this does not use MFC. Please help me achieving this.
If you have many items you should consider switching to Virtual Lists. It is the fastest way to access the data. If you do not want to invest time to this, then the easiest way for you will be the following:
When you populate the CListCtrl store the ID of each item in the item data using the SetItemData() method. The ID will always be associated with the item, even after re-sorting.
When you need to locate the required item, just scan all items, but do not use GetItemText(). Use GetItemData() instead. This will be faster