GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — List view attaches with weakEventHandler · alvsgithub/NativeScript@fd9ff18

File tree

Expand file treeCollapse file tree
Open diff view settings
Filter options
  • ui
    • core
      • weak-event-listener.d.ts
    • list-view
      • list-view-common.ts
      • list-view.ios.ts
Expand file treeCollapse file tree
Open diff view settings
Collapse file

‎ui/core/weak-event-listener.d.ts‎

Copy file name to clipboardExpand all lines: ui/core/weak-event-listener.d.ts
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ declare module "ui/core/weak-event-listener" {
3333
/**
3434
* A string to use as key for key value pair instance.
3535
*/
36-
key?: string;
36+
key: string;
3737
}
3838

3939
/**
Collapse file

‎ui/list-view/list-view-common.ts‎

Copy file name to clipboardExpand all lines: ui/list-view/list-view-common.ts
+28-14Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,28 @@
11
import observable = require("data/observable");
2+
import observableArray = require("data/observable-array");
23
import view = require("ui/core/view");
34
import proxy = require("ui/core/proxy");
45
import definition = require("ui/list-view");
56
import dependencyObservable = require("ui/core/dependency-observable");
67
import builder = require("ui/builder");
78
import label = require("ui/label");
89
import color = require("color");
10+
import weakEventListener = require("ui/core/weak-event-listener");
911

1012
var ITEMS = "items";
1113
var ITEMTEMPLATE = "itemTemplate";
1214
var ISSCROLLING = "isScrolling";
1315
var LISTVIEW = "ListView";
14-
var ITEMSCHANGED = "_itemsChanged";
15-
var CHANGE = "change";
1616
var SEPARATORCOLOR = "separatorColor";
17+
var WEAKEVENTKEY = "_observableArrayChanged";
1718

1819
export module knownTemplates {
1920
export var itemTemplate = "itemTemplate";
2021
}
2122

2223
function onItemsPropertyChanged(data: dependencyObservable.PropertyChangeData) {
23-
var listView = <definition.ListView>data.object;
24-
var itemsChanged = listView[ITEMSCHANGED];
25-
26-
if (data.oldValue instanceof observable.Observable) {
27-
(<observable.Observable>data.oldValue).off(CHANGE, itemsChanged);
28-
}
29-
30-
if (data.newValue instanceof observable.Observable) {
31-
(<observable.Observable>data.newValue).on(CHANGE, itemsChanged);
32-
}
33-
34-
listView.refresh();
24+
var listView = <ListView>data.object;
25+
listView._onItemsPropertyChanged(data);
3526
}
3627

3728
function onItemTemplatePropertyChanged(data: dependencyObservable.PropertyChangeData) {
@@ -79,6 +70,7 @@ export class ListView extends view.View implements definition.ListView {
7970
);
8071

8172
private _itemsChanged: (args: observable.EventData) => void;
73+
private _weakEventListenerOptions: weakEventListener.WeakEventListenerOptions;
8274

8375
constructor() {
8476
super();
@@ -143,6 +135,28 @@ export class ListView extends view.View implements definition.ListView {
143135
lbl.text = this._getDataItem(index) + "";
144136
return lbl;
145137
}
138+
139+
140+
public _onItemsPropertyChanged(data: dependencyObservable.PropertyChangeData) {
141+
if (data.oldValue instanceof observable.Observable && this._weakEventListenerOptions) {
142+
weakEventListener.WeakEventListener.removeWeakEventListener(this._weakEventListenerOptions);
143+
this._weakEventListenerOptions = null;
144+
}
145+
146+
if (data.newValue instanceof observable.Observable) {
147+
this._weakEventListenerOptions = {
148+
targetWeakRef: new WeakRef(this),
149+
sourceWeakRef: new WeakRef(data.newValue),
150+
eventName: observableArray.ObservableArray.changeEvent,
151+
handler: this._itemsChanged,
152+
handlerContext: this,
153+
key: WEAKEVENTKEY
154+
};
155+
weakEventListener.WeakEventListener.addWeakEventListener(this._weakEventListenerOptions);
156+
}
157+
158+
this.refresh();
159+
}
146160
}
147161

148162
function getExports(instance: view.View): any {
Collapse file

‎ui/list-view/list-view.ios.ts‎

Copy file name to clipboardExpand all lines: ui/list-view/list-view.ios.ts
+12-3Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@ export class ListView extends common.ListView {
151151
private _delegate;
152152
private _heights: Array<number>;
153153
private _preparingCell: boolean = false;
154+
private _isDataDirty: boolean = false;
154155

155156
constructor() {
156157
super();
@@ -172,6 +173,9 @@ export class ListView extends common.ListView {
172173

173174
public onLoaded() {
174175
super.onLoaded();
176+
if (this._isDataDirty) {
177+
this.refresh();
178+
}
175179
this._ios.delegate = this._delegate;
176180
}
177181

@@ -185,8 +189,13 @@ export class ListView extends common.ListView {
185189
}
186190

187191
public refresh() {
188-
this._ios.reloadData();
189-
this.requestLayout();
192+
if (this.isLoaded) {
193+
this._ios.reloadData();
194+
this.requestLayout();
195+
this._isDataDirty = false;
196+
} else {
197+
this._isDataDirty = true;
198+
}
190199
}
191200

192201
public getHeight(index: number): number {
@@ -242,7 +251,7 @@ export class ListView extends common.ListView {
242251
cell.contentView.addSubview(view.ios);
243252
this._addView(view);
244253
}
245-
254+
246255
this._prepareItem(view, indexPath.row);
247256
cellHeight = this._layoutCell(view, indexPath);
248257
}

0 commit comments

Comments
0 (0)
You are visitor 01402520 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.