| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 31d1019 commit 4bcb984
3 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -23,8 +23,9 @@ export abstract class ListViewBase extends View implements ListViewDefinition { | |||
| 23 | 23 | public static itemTapEvent = "itemTap"; | |
| 24 | 24 | public static loadMoreItemsEvent = "loadMoreItems"; | |
| 25 | 25 | // TODO: get rid of such hacks. | |
| 26 | - public static knownFunctions = ["itemTemplateSelector"]; //See component-builder.ts isKnownFunction | ||
| 26 | + public static knownFunctions = ["itemTemplateSelector", "itemIdGenerator"]; //See component-builder.ts isKnownFunction | ||
| 27 | 27 | ||
| 28 | + private _itemIdGenerator: (item: any, index: number, items: any) => number = (_item: any, index: number) => index; | ||
| 28 | 29 | private _itemTemplateSelector: (item: any, index: number, items: any) => string; | |
| 29 | 30 | private _itemTemplateSelectorBindable = new Label(); | |
| 30 | 31 | public _defaultTemplate: KeyedTemplate = { | |
@@ -72,6 +73,14 @@ export abstract class ListViewBase extends View implements ListViewDefinition { | |||
| 72 | 73 | } | |
| 73 | 74 | } | |
| 74 | 75 | ||
| 76 | + get itemIdGenerator(): (item: any, index: number, items: any) => number { | ||
| 77 | + return this._itemIdGenerator; | ||
| 78 | + } | ||
| 79 | + | ||
| 80 | + set itemIdGenerator(generatorFn: (item: any, index: number, items: any) => number) { | ||
| 81 | + this._itemIdGenerator = generatorFn; | ||
| 82 | + } | ||
| 83 | + | ||
| 75 | 84 | public refresh() { | |
| 76 | 85 | // | |
| 77 | 86 | } | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -216,14 +216,19 @@ function ensureListViewAdapterClass() { | |||
| 216 | 216 | public getItem(i: number) { | |
| 217 | 217 | if (this.owner && this.owner.items && i < this.owner.items.length) { | |
| 218 | 218 | let getItem = (<ItemsSource>this.owner.items).getItem; | |
| 219 | - return getItem ? getItem(i) : this.owner.items[i]; | ||
| 219 | + return getItem ? getItem.call(this.owner.items, i) : this.owner.items[i]; | ||
| 220 | 220 | } | |
| 221 | 221 | ||
| 222 | 222 | return null; | |
| 223 | 223 | } | |
| 224 | 224 | ||
| 225 | 225 | public getItemId(i: number) { | |
| 226 | - return long(i); | ||
| 226 | + let item = this.getItem(i); | ||
| 227 | + let id = i; | ||
| 228 | + if (this.owner && item && this.owner.items) { | ||
| 229 | + id = this.owner.itemIdGenerator(item, i, this.owner.items); | ||
| 230 | + } | ||
| 231 | + return long(id); | ||
| 227 | 232 | } | |
| 228 | 233 | ||
| 229 | 234 | public hasStableIds(): boolean { | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -63,6 +63,11 @@ export class ListView extends View { | |||
| 63 | 63 | */ | |
| 64 | 64 | itemTemplateSelector: string | ((item: any, index: number, items: any) => string); | |
| 65 | 65 | ||
| 66 | + /** | ||
| 67 | + * Item id generator | ||
| 68 | + */ | ||
| 69 | + itemIdGenerator: (item: any, index: number, items: any) => number; | ||
| 70 | + | ||
| 66 | 71 | /** | |
| 67 | 72 | * Gets or set the items separator line color of the ListView. | |
| 68 | 73 | */ | |
| Back | FazBrowse Home | New Git URL |
0 commit comments