mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-11-05 13:26:48 +08:00
feat(core): Repeater multiple item templates implementation (#8981)
This commit is contained in:
committed by
GitHub
parent
0bbdeaf0b5
commit
b113f1916d
@@ -37,6 +37,7 @@ export function pageLoaded(args: EventData) {
|
||||
examples.set('text-view', 'text-view/main-page');
|
||||
examples.set('webview', 'web-view/main-page');
|
||||
examples.set('progress-bar', 'progress-bar/main-page');
|
||||
examples.set('repeater', 'repeater/main-page');
|
||||
examples.set('date-picker', 'date-picker/date-picker-page');
|
||||
examples.set('nested-frames', 'nested-frames/main-page');
|
||||
examples.set('screen-qualifiers', 'screen-qualifiers/main-page');
|
||||
|
||||
17
apps/ui/src/repeater/main-page.ts
Normal file
17
apps/ui/src/repeater/main-page.ts
Normal file
@@ -0,0 +1,17 @@
|
||||
import { EventData } from '@nativescript/core/data/observable';
|
||||
import { SubMainPageViewModel } from '../sub-main-page-view-model';
|
||||
import { WrapLayout } from '@nativescript/core/ui/layouts/wrap-layout';
|
||||
import { Page } from '@nativescript/core/ui/page';
|
||||
|
||||
export function pageLoaded(args: EventData) {
|
||||
const page = <Page>args.object;
|
||||
const wrapLayout = <WrapLayout>page.getViewById('wrapLayoutWithExamples');
|
||||
page.bindingContext = new SubMainPageViewModel(wrapLayout, loadExamples());
|
||||
}
|
||||
|
||||
export function loadExamples() {
|
||||
const examples = new Map<string, string>();
|
||||
examples.set('multi-templates', 'repeater/multi-templates-page');
|
||||
|
||||
return examples;
|
||||
}
|
||||
6
apps/ui/src/repeater/main-page.xml
Normal file
6
apps/ui/src/repeater/main-page.xml
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<Page loaded="pageLoaded">
|
||||
<ScrollView orientation="vertical" row="1">
|
||||
<WrapLayout id="wrapLayoutWithExamples"/>
|
||||
</ScrollView>
|
||||
</Page>
|
||||
13
apps/ui/src/repeater/multi-templates-page.ts
Normal file
13
apps/ui/src/repeater/multi-templates-page.ts
Normal file
@@ -0,0 +1,13 @@
|
||||
import { EventData } from '@nativescript/core/data/observable';
|
||||
import { ObservableArray } from '@nativescript/core/data/observable-array';
|
||||
import { Page } from '@nativescript/core/ui/page';
|
||||
import { MultiTemplatesViewModel } from './multi-templates-view-model';
|
||||
|
||||
export function pageLoaded(args: EventData) {
|
||||
const page = <Page>args.object;
|
||||
page.bindingContext = new MultiTemplatesViewModel();
|
||||
}
|
||||
|
||||
export function getOddEvenTemplate(item: number, index: number, items: ObservableArray<number>): string {
|
||||
return index % 2 === 0 ? 'even' : '';
|
||||
}
|
||||
18
apps/ui/src/repeater/multi-templates-page.xml
Normal file
18
apps/ui/src/repeater/multi-templates-page.xml
Normal file
@@ -0,0 +1,18 @@
|
||||
<Page loaded="pageLoaded">
|
||||
<ScrollView>
|
||||
<Repeater items="{{ items }}" itemTemplateSelector="getOddEvenTemplate">
|
||||
<Repeater.itemTemplate>
|
||||
<StackLayout backgroundColor="blue" height="40">
|
||||
<Label text="{{ $value }}" class="p-r-10" color="#fff" fontSize="16" />
|
||||
</StackLayout>
|
||||
</Repeater.itemTemplate>
|
||||
<Repeater.itemTemplates>
|
||||
<template key="even">
|
||||
<StackLayout backgroundColor="green" height="40">
|
||||
<Label text="{{ $value }}" class="p-r-10" color="#fff" fontSize="16" />
|
||||
</StackLayout>
|
||||
</template>
|
||||
</Repeater.itemTemplates>
|
||||
</Repeater>
|
||||
</ScrollView>
|
||||
</Page>
|
||||
15
apps/ui/src/repeater/multi-templates-view-model.ts
Normal file
15
apps/ui/src/repeater/multi-templates-view-model.ts
Normal file
@@ -0,0 +1,15 @@
|
||||
import { Observable } from '@nativescript/core/data/observable';
|
||||
import { ObservableArray } from '@nativescript/core/data/observable-array';
|
||||
|
||||
export class MultiTemplatesViewModel extends Observable {
|
||||
private _items: ObservableArray<number>;
|
||||
|
||||
get items(): ObservableArray<number> {
|
||||
this._items = new ObservableArray<number>();
|
||||
for (let i = 0; i < 20; i++) {
|
||||
this._items.push(i);
|
||||
}
|
||||
|
||||
return this._items;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user