Improvements to initialization of widgets nested in async-fragment tags

This commit is contained in:
Patrick Steele-Idem 2014-12-18 17:26:25 -07:00
parent 5bc4abc018
commit 5d233fcb53
4 changed files with 19 additions and 8 deletions

View File

@ -1,7 +1,6 @@
'use strict';
var WidgetDef = require('./WidgetDef');
var uniqueId = require('./uniqueId');
var WIDGET_CONTEXT_KEY = 'widgets';
var initWidgets = require('./init-widgets');
var EventEmitter = require('events').EventEmitter;
var inherit = require('raptor-util/inherit');
@ -84,8 +83,9 @@ inherit(WidgetsContext, EventEmitter);
WidgetsContext.getWidgetsContext = function (out) {
var global = out.global;
return global[WIDGET_CONTEXT_KEY] ||
(global[WIDGET_CONTEXT_KEY] = new WidgetsContext(out));
return out.widgets ||
global.widgets ||
(global.widgets = new WidgetsContext(out));
};

View File

@ -78,6 +78,7 @@ WrappedString.prototype = {
}
};
exports.WidgetsContext = WidgetsContext;
exports.getWidgetsContext = WidgetsContext.getWidgetsContext;
exports.uniqueId = require('./uniqueId');
exports.attrs = function(widget) {
@ -128,7 +129,7 @@ exports.writeInitWidgetsCode = function(widgetsContext, out, options) {
} else {
var widgets = widgetsContext.getWidgets();
if (!widgets) {
if (!widgets || !widgets.length) {
return;
}

View File

@ -35,5 +35,5 @@
"publishConfig": {
"registry": "https://registry.npmjs.org/"
},
"version": "1.1.12"
"version": "1.2.0"
}

View File

@ -1,4 +1,5 @@
var markoWidgets = require('../');
var WidgetContext = markoWidgets.WidgetsContext;
module.exports = function render(input, out) {
var widgetsContext = markoWidgets.getWidgetsContext(out);
@ -6,10 +7,19 @@ module.exports = function render(input, out) {
var options = input.immediate ? {immediate: true} : null;
if (input.immediate === true) {
out.on('asyncFragmentFinish', function(eventArgs) {
out.global.events.on('asyncFragmentBeforeRender', function(eventArgs) {
if (eventArgs.clientReorder) {
var asyncFragmentOut = eventArgs.out;
asyncFragmentOut.widgets = new WidgetContext(asyncFragmentOut);
}
});
out.global.events.on('asyncFragmentFinish', function(eventArgs) {
var asyncFragmentOut = eventArgs.out;
var widgetsContext = markoWidgets.getWidgetsContext(asyncFragmentOut);
markoWidgets.writeInitWidgetsCode(widgetsContext, asyncFragmentOut, options);
var widgetsContext = asyncFragmentOut.widgets;
if (widgetsContext) {
markoWidgets.writeInitWidgetsCode(widgetsContext, asyncFragmentOut, options);
}
});
}