default item content added + fixes

This commit is contained in:
Vladimir Enchev
2015-05-25 15:23:46 +03:00
parent 5a85775bf0
commit 0da206a024

View File

@ -11,6 +11,7 @@ import stackLayoutModule = require("ui/layouts/stack-layout");
import builder = require("ui/builder"); import builder = require("ui/builder");
import utils = require("utils/utils"); import utils = require("utils/utils");
import platform = require("platform"); import platform = require("platform");
import labelModule = require("ui/label");
var ITEMS = "items"; var ITEMS = "items";
var ITEMTEMPLATE = "itemTemplate"; var ITEMTEMPLATE = "itemTemplate";
@ -101,6 +102,7 @@ export class Repeater extends viewModule.CustomLayoutView implements definition.
public refresh() { public refresh() {
this.isDirty = true; this.isDirty = true;
this._createChildren(); this._createChildren();
} }
@ -110,6 +112,13 @@ export class Repeater extends viewModule.CustomLayoutView implements definition.
this._createChildren(); this._createChildren();
} }
public onUnloaded() {
super.onUnloaded();
}
public _onItemsPropertyChanged(data: dependencyObservable.PropertyChangeData) { public _onItemsPropertyChanged(data: dependencyObservable.PropertyChangeData) {
if (data.oldValue instanceof observable.Observable) { if (data.oldValue instanceof observable.Observable) {
weakEvents.removeWeakEventListener(data.oldValue, observableArray.ObservableArray.changeEvent, this._onItemsChanged, this); weakEvents.removeWeakEventListener(data.oldValue, observableArray.ObservableArray.changeEvent, this._onItemsChanged, this);
@ -119,6 +128,14 @@ export class Repeater extends viewModule.CustomLayoutView implements definition.
weakEvents.addWeakEventListener(data.newValue, observableArray.ObservableArray.changeEvent, this._onItemsChanged, this); weakEvents.addWeakEventListener(data.newValue, observableArray.ObservableArray.changeEvent, this._onItemsChanged, this);
} }
if (types.isUndefined(this.itemsLayout)) {
this.itemsLayout = new stackLayoutModule.StackLayout();
}
if (this.itemsLayout.parent !== this) {
this._addView(this.itemsLayout);
}
this.refresh(); this.refresh();
} }
@ -128,22 +145,13 @@ export class Repeater extends viewModule.CustomLayoutView implements definition.
private _createChildren() { private _createChildren() {
if (this.isDirty && this.isLoaded) { if (this.isDirty && this.isLoaded) {
if (types.isDefined(this.items) && types.isNumber(this.items.length)) {
if (types.isUndefined(this.itemsLayout)) {
this.itemsLayout = new stackLayoutModule.StackLayout();
}
if (this.itemsLayout.parent !== this) {
this._addView(this.itemsLayout);
}
clearItemsLayout(this.itemsLayout); clearItemsLayout(this.itemsLayout);
if (!types.isNullOrUndefined(this.items) && types.isNumber(this.items.length)) {
var i: number; var i: number;
for (i = 0; i < this.items.length; i++) { for (i = 0; i < this.items.length; i++) {
var viewToAdd = builder.parse(this.itemTemplate, this); var viewToAdd = !types.isNullOrUndefined(this.itemTemplate) ? builder.parse(this.itemTemplate, this) : this._getDefaultItemContent(i);
if (types.isDefined(viewToAdd)) { if (!types.isNullOrUndefined(viewToAdd)) {
this.itemsLayout.addChild(viewToAdd); this.itemsLayout.addChild(viewToAdd);
viewToAdd.bindingContext = this._getDataItem(i); viewToAdd.bindingContext = this._getDataItem(i);
} }
@ -153,6 +161,15 @@ export class Repeater extends viewModule.CustomLayoutView implements definition.
} }
} }
public _getDefaultItemContent(index: number): viewModule.View {
var lbl = new labelModule.Label();
lbl.bind({
targetProperty: "text",
sourceProperty: "$value"
});
return lbl;
}
private _getDataItem(index: number): any { private _getDataItem(index: number): any {
return this.items.getItem ? this.items.getItem(index) : this.items[index]; return this.items.getItem ? this.items.getItem(index) : this.items[index];
} }
@ -198,11 +215,16 @@ export class Repeater extends viewModule.CustomLayoutView implements definition.
} }
function clearItemsLayout(itemsLayout: layoutModule.Layout) { function clearItemsLayout(itemsLayout: layoutModule.Layout) {
if (!types.isNullOrUndefined(itemsLayout)) {
var i: number = itemsLayout.getChildrenCount(); var i: number = itemsLayout.getChildrenCount();
if (i > 0) { if (i > 0) {
while (i >= 0) { while (i >= 0) {
itemsLayout.removeChild(itemsLayout.getChildAt(i)); var child = itemsLayout.getChildAt(i);
if (!types.isNullOrUndefined(child)) {
itemsLayout.removeChild(child);
}
i--; i--;
} }
} }
} }
}