mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-11-05 13:26:48 +08:00
List view attaches with weakEventHandler
This commit is contained in:
2
ui/core/weak-event-listener.d.ts
vendored
2
ui/core/weak-event-listener.d.ts
vendored
@@ -33,7 +33,7 @@ declare module "ui/core/weak-event-listener" {
|
|||||||
/**
|
/**
|
||||||
* A string to use as key for key value pair instance.
|
* A string to use as key for key value pair instance.
|
||||||
*/
|
*/
|
||||||
key?: string;
|
key: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import observable = require("data/observable");
|
import observable = require("data/observable");
|
||||||
|
import observableArray = require("data/observable-array");
|
||||||
import view = require("ui/core/view");
|
import view = require("ui/core/view");
|
||||||
import proxy = require("ui/core/proxy");
|
import proxy = require("ui/core/proxy");
|
||||||
import definition = require("ui/list-view");
|
import definition = require("ui/list-view");
|
||||||
@@ -6,32 +7,22 @@ import dependencyObservable = require("ui/core/dependency-observable");
|
|||||||
import builder = require("ui/builder");
|
import builder = require("ui/builder");
|
||||||
import label = require("ui/label");
|
import label = require("ui/label");
|
||||||
import color = require("color");
|
import color = require("color");
|
||||||
|
import weakEventListener = require("ui/core/weak-event-listener");
|
||||||
|
|
||||||
var ITEMS = "items";
|
var ITEMS = "items";
|
||||||
var ITEMTEMPLATE = "itemTemplate";
|
var ITEMTEMPLATE = "itemTemplate";
|
||||||
var ISSCROLLING = "isScrolling";
|
var ISSCROLLING = "isScrolling";
|
||||||
var LISTVIEW = "ListView";
|
var LISTVIEW = "ListView";
|
||||||
var ITEMSCHANGED = "_itemsChanged";
|
|
||||||
var CHANGE = "change";
|
|
||||||
var SEPARATORCOLOR = "separatorColor";
|
var SEPARATORCOLOR = "separatorColor";
|
||||||
|
var WEAKEVENTKEY = "_observableArrayChanged";
|
||||||
|
|
||||||
export module knownTemplates {
|
export module knownTemplates {
|
||||||
export var itemTemplate = "itemTemplate";
|
export var itemTemplate = "itemTemplate";
|
||||||
}
|
}
|
||||||
|
|
||||||
function onItemsPropertyChanged(data: dependencyObservable.PropertyChangeData) {
|
function onItemsPropertyChanged(data: dependencyObservable.PropertyChangeData) {
|
||||||
var listView = <definition.ListView>data.object;
|
var listView = <ListView>data.object;
|
||||||
var itemsChanged = listView[ITEMSCHANGED];
|
listView._onItemsPropertyChanged(data);
|
||||||
|
|
||||||
if (data.oldValue instanceof observable.Observable) {
|
|
||||||
(<observable.Observable>data.oldValue).off(CHANGE, itemsChanged);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (data.newValue instanceof observable.Observable) {
|
|
||||||
(<observable.Observable>data.newValue).on(CHANGE, itemsChanged);
|
|
||||||
}
|
|
||||||
|
|
||||||
listView.refresh();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function onItemTemplatePropertyChanged(data: dependencyObservable.PropertyChangeData) {
|
function onItemTemplatePropertyChanged(data: dependencyObservable.PropertyChangeData) {
|
||||||
@@ -79,6 +70,7 @@ export class ListView extends view.View implements definition.ListView {
|
|||||||
);
|
);
|
||||||
|
|
||||||
private _itemsChanged: (args: observable.EventData) => void;
|
private _itemsChanged: (args: observable.EventData) => void;
|
||||||
|
private _weakEventListenerOptions: weakEventListener.WeakEventListenerOptions;
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
super();
|
super();
|
||||||
@@ -143,6 +135,28 @@ export class ListView extends view.View implements definition.ListView {
|
|||||||
lbl.text = this._getDataItem(index) + "";
|
lbl.text = this._getDataItem(index) + "";
|
||||||
return lbl;
|
return lbl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public _onItemsPropertyChanged(data: dependencyObservable.PropertyChangeData) {
|
||||||
|
if (data.oldValue instanceof observable.Observable && this._weakEventListenerOptions) {
|
||||||
|
weakEventListener.WeakEventListener.removeWeakEventListener(this._weakEventListenerOptions);
|
||||||
|
this._weakEventListenerOptions = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data.newValue instanceof observable.Observable) {
|
||||||
|
this._weakEventListenerOptions = {
|
||||||
|
targetWeakRef: new WeakRef(this),
|
||||||
|
sourceWeakRef: new WeakRef(data.newValue),
|
||||||
|
eventName: observableArray.ObservableArray.changeEvent,
|
||||||
|
handler: this._itemsChanged,
|
||||||
|
handlerContext: this,
|
||||||
|
key: WEAKEVENTKEY
|
||||||
|
};
|
||||||
|
weakEventListener.WeakEventListener.addWeakEventListener(this._weakEventListenerOptions);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.refresh();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getExports(instance: view.View): any {
|
function getExports(instance: view.View): any {
|
||||||
|
|||||||
@@ -151,6 +151,7 @@ export class ListView extends common.ListView {
|
|||||||
private _delegate;
|
private _delegate;
|
||||||
private _heights: Array<number>;
|
private _heights: Array<number>;
|
||||||
private _preparingCell: boolean = false;
|
private _preparingCell: boolean = false;
|
||||||
|
private _isDataDirty: boolean = false;
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
super();
|
super();
|
||||||
@@ -172,6 +173,9 @@ export class ListView extends common.ListView {
|
|||||||
|
|
||||||
public onLoaded() {
|
public onLoaded() {
|
||||||
super.onLoaded();
|
super.onLoaded();
|
||||||
|
if (this._isDataDirty) {
|
||||||
|
this.refresh();
|
||||||
|
}
|
||||||
this._ios.delegate = this._delegate;
|
this._ios.delegate = this._delegate;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -185,8 +189,13 @@ export class ListView extends common.ListView {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public refresh() {
|
public refresh() {
|
||||||
this._ios.reloadData();
|
if (this.isLoaded) {
|
||||||
this.requestLayout();
|
this._ios.reloadData();
|
||||||
|
this.requestLayout();
|
||||||
|
this._isDataDirty = false;
|
||||||
|
} else {
|
||||||
|
this._isDataDirty = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public getHeight(index: number): number {
|
public getHeight(index: number): number {
|
||||||
@@ -242,7 +251,7 @@ export class ListView extends common.ListView {
|
|||||||
cell.contentView.addSubview(view.ios);
|
cell.contentView.addSubview(view.ios);
|
||||||
this._addView(view);
|
this._addView(view);
|
||||||
}
|
}
|
||||||
|
|
||||||
this._prepareItem(view, indexPath.row);
|
this._prepareItem(view, indexPath.row);
|
||||||
cellHeight = this._layoutCell(view, indexPath);
|
cellHeight = this._layoutCell(view, indexPath);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user