mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-11-05 13:26:48 +08:00
Merge pull request #854 from NativeScript/nnikolov/BindingContextSetBeforeAddingToVisualTree
BindingContext will be set before adding items to visual tree (ListView, Repeater).
This commit is contained in:
@@ -140,6 +140,15 @@ export class Binding {
|
||||
source: WeakRef<Object>;
|
||||
target: WeakRef<Bindable>;
|
||||
|
||||
public loadedHandlerVisualTreeBinding(args) {
|
||||
var targetInstance = args.object;
|
||||
targetInstance.off(viewModule.View.loadedEvent, this.loadedHandlerVisualTreeBinding, this);
|
||||
this.unbind();
|
||||
if (!types.isNullOrUndefined(targetInstance.bindingContext)) {
|
||||
this.bind(targetInstance.bindingContext);
|
||||
}
|
||||
};
|
||||
|
||||
private propertyChangeListeners = {};
|
||||
|
||||
private sourceOptions: { instance: WeakRef<any>; property: any };
|
||||
@@ -213,6 +222,11 @@ export class Binding {
|
||||
if (parentView) {
|
||||
currentObject = parentView.bindingContext;
|
||||
}
|
||||
else {
|
||||
var targetInstance = this.target.get();
|
||||
targetInstance.off(viewModule.View.loadedEvent, this.loadedHandlerVisualTreeBinding, this);
|
||||
targetInstance.on(viewModule.View.loadedEvent, this.loadedHandlerVisualTreeBinding, this);
|
||||
}
|
||||
currentObjectChanged = true;
|
||||
}
|
||||
result.push({ instance: currentObject, property: objProp });
|
||||
@@ -507,7 +521,7 @@ export class Binding {
|
||||
indexAsInt--;
|
||||
}
|
||||
}
|
||||
else {
|
||||
else if (types.isString(index)) {
|
||||
while (result && result.typeName !== index) {
|
||||
result = result.parent;
|
||||
}
|
||||
|
||||
@@ -205,6 +205,7 @@ class ListViewAdapter extends android.widget.BaseAdapter {
|
||||
}
|
||||
|
||||
if (args.view) {
|
||||
this._listView._prepareItem(args.view, index);
|
||||
if (!args.view.parent) {
|
||||
if (args.view instanceof layoutBaseModule.LayoutBase) {
|
||||
this._listView._addView(args.view);
|
||||
@@ -221,8 +222,6 @@ class ListViewAdapter extends android.widget.BaseAdapter {
|
||||
this._listView._realizedItems[convertView.hashCode()] = args.view;
|
||||
// cache the realized index (used to raise the ItemLoading event upon scroll stop)
|
||||
args.view[REALIZED_INDEX] = index;
|
||||
|
||||
this._listView._prepareItem(args.view, index);
|
||||
}
|
||||
|
||||
return convertView;
|
||||
|
||||
@@ -239,12 +239,12 @@ export class ListView extends common.ListView {
|
||||
var args = notifyForItemAtIndex(this, cell, ITEMLOADING, indexPath);
|
||||
var view = cell.view = args.view || this._getDefaultItemContent(indexPath.row);
|
||||
|
||||
this._prepareItem(view, indexPath.row);
|
||||
if (view && !view.parent && view.ios) {
|
||||
cell.contentView.addSubview(view.ios);
|
||||
this._addView(view);
|
||||
}
|
||||
|
||||
this._prepareItem(view, indexPath.row);
|
||||
cellHeight = this._layoutCell(view, indexPath);
|
||||
}
|
||||
finally {
|
||||
|
||||
@@ -149,8 +149,8 @@ export class Repeater extends viewModule.CustomLayoutView implements definition.
|
||||
for (i = 0; i < this.items.length; i++) {
|
||||
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);
|
||||
this.itemsLayout.addChild(viewToAdd);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user