Skip to content

Commit 71b5c2a

Browse files
author
Steven Orvell
committed
Adds Polymer.RenderStatus.afterFirstRender method. Call to perform tasks after an element first renders.
1 parent 320d5c7 commit 71b5c2a

File tree

1 file changed

+37
-3
lines changed

1 file changed

+37
-3
lines changed

src/lib/render-status.html

+37-3
Original file line numberDiff line numberDiff line change
@@ -37,16 +37,50 @@
3737

3838
_makeReady: function() {
3939
this._ready = true;
40-
this._callbacks.forEach(function(cb) {
41-
cb();
42-
});
40+
for (var i=0; i < this._callbacks.length; i++) {
41+
this._callbacks[i]();
42+
}
4343
this._callbacks = [];
4444
},
4545

4646
_catchFirstRender: function() {
4747
requestAnimationFrame(function() {
4848
Polymer.RenderStatus._makeReady();
4949
});
50+
},
51+
52+
_afterFirstRenderQueue: [],
53+
54+
_waitingAfterFirstRender: false,
55+
56+
afterFirstRender: function(element, fn, args) {
57+
if (!this._waitingAfterFirstRender) {
58+
this._waitingAfterFirstRender = true;
59+
this.whenReady(this._flushAfterFirstRender);
60+
}
61+
this._afterFirstRenderQueue.push([element, fn, args]);
62+
},
63+
64+
_flushAfterFirstRender: function() {
65+
requestAnimationFrame(function() {
66+
var self = Polymer.RenderStatus;
67+
// if already ready, wait 2 frames to ensure async
68+
if (self._ready) {
69+
requestAnimationFrame(self.__flushAfterFirstRender);
70+
} else {
71+
self.__flushAfterFirstRender();
72+
}
73+
});
74+
},
75+
76+
__flushAfterFirstRender: function() {
77+
var self = Polymer.RenderStatus;
78+
self._waitingAfterFirstRender = false;
79+
for (var i=0, h; i < self._afterFirstRenderQueue.length; i++) {
80+
h = self._afterFirstRenderQueue[i];
81+
h[1].apply(h[0], h[2] || Polymer.nar);
82+
};
83+
self._afterFirstRenderQueue = [];
5084
}
5185
};
5286

0 commit comments

Comments
 (0)