mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-11-05 13:26:48 +08:00
recycleNativeView filed now accepts: "always" | "never" | "auto". Always will recycle the nativeView no matter if its nativeView or android proprties are accessed. Never will disable recycling. Auto will recycle it only if nativeView and android properties are not accessed.
54 lines
1.6 KiB
TypeScript
54 lines
1.6 KiB
TypeScript
import { ListPicker as ListPickerDefinition, ItemsSource } from ".";
|
|
import { View, Property, CoercibleProperty } from "../core/view";
|
|
|
|
export * from "../core/view";
|
|
|
|
export class ListPickerBase extends View implements ListPickerDefinition {
|
|
|
|
public selectedIndex: number;
|
|
public items: any[] | ItemsSource;
|
|
public isItemsSource: boolean;
|
|
|
|
public _getItemAsString(index: number): any {
|
|
let items = this.items;
|
|
if (!items) {
|
|
return " ";
|
|
}
|
|
|
|
let item = this.isItemsSource ? (<ItemsSource>this.items).getItem(index) : this.items[index];
|
|
return (item === undefined || item === null) ? index + "" : item + "";
|
|
}
|
|
}
|
|
|
|
ListPickerBase.prototype.recycleNativeView = "auto";
|
|
|
|
export const selectedIndexProperty = new CoercibleProperty<ListPickerBase, number>({
|
|
name: "selectedIndex", defaultValue: -1,
|
|
valueConverter: (v) => parseInt(v),
|
|
coerceValue: (target, value) => {
|
|
let items = target.items;
|
|
if (items) {
|
|
let max = items.length - 1;
|
|
if (value < 0) {
|
|
value = 0;
|
|
}
|
|
if (value > max) {
|
|
value = max;
|
|
}
|
|
} else {
|
|
value = -1;
|
|
}
|
|
|
|
return value;
|
|
}
|
|
});
|
|
selectedIndexProperty.register(ListPickerBase);
|
|
|
|
export const itemsProperty = new Property<ListPickerBase, any[] | ItemsSource>({
|
|
name: "items", valueChanged: (target, oldValue, newValue) => {
|
|
let getItem = newValue && (<ItemsSource>newValue).getItem;
|
|
target.isItemsSource = typeof getItem === "function";
|
|
}
|
|
});
|
|
itemsProperty.register(ListPickerBase);
|