diff --git a/lib/WidgetsContext.js b/lib/WidgetsContext.js index 774c08ebb..2d5664169 100644 --- a/lib/WidgetsContext.js +++ b/lib/WidgetsContext.js @@ -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)); }; diff --git a/lib/marko-widgets.js b/lib/marko-widgets.js index 9ecfa716d..ff8f6114b 100644 --- a/lib/marko-widgets.js +++ b/lib/marko-widgets.js @@ -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; } diff --git a/package.json b/package.json index 538956200..7813af39d 100644 --- a/package.json +++ b/package.json @@ -35,5 +35,5 @@ "publishConfig": { "registry": "https://registry.npmjs.org/" }, - "version": "1.1.12" + "version": "1.2.0" } \ No newline at end of file diff --git a/taglib/init-widgets-tag.js b/taglib/init-widgets-tag.js index 0b5e806d6..9a0998751 100644 --- a/taglib/init-widgets-tag.js +++ b/taglib/init-widgets-tag.js @@ -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); + } }); }