Make rendered callback sort of work

This commit is contained in:
David Greenspan
2014-05-27 15:53:22 -07:00
parent 6665735bb0
commit e728fb344b
3 changed files with 36 additions and 8 deletions

View File

@@ -67,7 +67,10 @@ Blaze.Component = Blaze.Controller.extend({
return self.render();
});
range.onstop(function () {
self.finalize();
if (! self.isFinalized) {
self.isFinalized = true;
self.finalize();
}
});
return range;
},

View File

@@ -1,3 +1,4 @@
// A constant empty array (frozen if the JS engine supports it).
var _emptyArray = Object.freeze ? Object.freeze([]) : [];
@@ -286,19 +287,18 @@ _.extend(Blaze.DOMRange.prototype, {
}
});
Blaze.DOMAugmenter = function () {};
Blaze.DOMAugmenter = JSClass.create();
_.extend(Blaze.DOMAugmenter, {
attach: function (range, element) {},
// arguments are same as were passed to `attach`
detach: function (range, element) {}
});
Blaze.EventAugmenter = function (eventMap) {
this.eventMap = eventMap;
this.handles = [];
};
Blaze.EventAugmenter.prototype = new Blaze.DOMAugmenter;
_.extend(Blaze.EventAugmenter.prototype, {
Blaze.EventAugmenter = Blaze.DOMAugmenter.extend({
constructor: function (eventMap) {
this.eventMap = eventMap;
this.handles = [];
},
attach: function (range, element) {
var self = this;
var eventMap = self.eventMap;

View File

@@ -11,6 +11,28 @@ _.extend(UI.body2, {
}
});
if (Meteor.isClient) {
UI.TemplateRenderedAugmenter = Blaze.DOMAugmenter.extend({
constructor: function () {
this.fired = false;
},
attach: function (range, element) {
if (! this.fired) {
this.fired = true; // only fire once
var tmpl = range.controller;
if (tmpl.rendered && ! tmpl.isFinalized) {
Deps.afterFlush(function () {
if (! tmpl.isFinalized) {
var templateInstance = {}; // XXX
tmpl.rendered.call(templateInstance);
}
});
}
}
}
});
}
UI.TemplateComponent = Blaze.Component.extend({
constructor: function (dataFunc, contentFunc, elseFunc) {
UI.TemplateComponent.__super__.constructor.call(this);
@@ -40,6 +62,9 @@ UI.TemplateComponent = Blaze.Component.extend({
range.addDOMAugmenter(new Blaze.EventAugmenter(m));
});
}
if (this.rendered) {
range.addDOMAugmenter(new UI.TemplateRenderedAugmenter);
}
return range;
},
events: function (eventMap) {