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 utils = require("utils/utils");
import platform = require("platform");
import labelModule = require("ui/label");
var ITEMS = "items";
var ITEMTEMPLATE = "itemTemplate";
@ -101,6 +102,7 @@ export class Repeater extends viewModule.CustomLayoutView implements definition.
public refresh() {
this.isDirty = true;
this._createChildren();
}
@ -110,6 +112,13 @@ export class Repeater extends viewModule.CustomLayoutView implements definition.
this._createChildren();
}
public onUnloaded() {
super.onUnloaded();
}
public _onItemsPropertyChanged(data: dependencyObservable.PropertyChangeData) {
if (data.oldValue instanceof observable.Observable) {
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);
}
if (types.isUndefined(this.itemsLayout)) {
this.itemsLayout = new stackLayoutModule.StackLayout();
}
if (this.itemsLayout.parent !== this) {
this._addView(this.itemsLayout);
}
this.refresh();
}
@ -128,22 +145,13 @@ export class Repeater extends viewModule.CustomLayoutView implements definition.
private _createChildren() {
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;
for (i = 0; i < this.items.length; i++) {
var viewToAdd = builder.parse(this.itemTemplate, this);
if (types.isDefined(viewToAdd)) {
var viewToAdd = !types.isNullOrUndefined(this.itemTemplate) ? builder.parse(this.itemTemplate, this) : this._getDefaultItemContent(i);
if (!types.isNullOrUndefined(viewToAdd)) {
this.itemsLayout.addChild(viewToAdd);
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 {
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) {
var i: number = itemsLayout.getChildrenCount();
if (i > 0) {
while (i >= 0) {
itemsLayout.removeChild(itemsLayout.getChildAt(i));
i--;
if (!types.isNullOrUndefined(itemsLayout)) {
var i: number = itemsLayout.getChildrenCount();
if (i > 0) {
while (i >= 0) {
var child = itemsLayout.getChildAt(i);
if (!types.isNullOrUndefined(child)) {
itemsLayout.removeChild(child);
}
i--;
}
}
}
}