feat(core): Repeater multiple item templates implementation (#8981)

This commit is contained in:
Dimitris - Rafail Katsampas
2020-10-27 05:13:22 +02:00
committed by GitHub
parent 0bbdeaf0b5
commit b113f1916d
12 changed files with 343 additions and 21 deletions

View File

@@ -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');

View 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;
}

View 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>

View 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' : '';
}

View 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>

View 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;
}
}