mirror of
https://github.com/marko-js/marko.git
synced 2025-12-08 19:26:05 +00:00
Async fragments and data providers working
This commit is contained in:
parent
910fa93156
commit
5fc68a8373
@ -30,6 +30,8 @@
|
|||||||
"raptor-modules": "~0.1.0-SNAPSHOT",
|
"raptor-modules": "~0.1.0-SNAPSHOT",
|
||||||
"raptor-render-context": "~0.1.0-SNAPSHOT",
|
"raptor-render-context": "~0.1.0-SNAPSHOT",
|
||||||
"raptor-data-providers": "~0.1.0-SNAPSHOT",
|
"raptor-data-providers": "~0.1.0-SNAPSHOT",
|
||||||
|
"raptor-xml": "~0.1.0-SNAPSHOT",
|
||||||
|
"raptor-objects": "~0.1.0-SNAPSHOT",
|
||||||
"htmlparser2": "~3.4.0",
|
"htmlparser2": "~3.4.0",
|
||||||
"char-props": "~0.1.5"
|
"char-props": "~0.1.5"
|
||||||
},
|
},
|
||||||
|
|||||||
@ -81,6 +81,7 @@ module.exports = {
|
|||||||
.on('error', callback);
|
.on('error', callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// console.log(attributes.async);
|
||||||
if (isTopLevelContext && attributes.async.remaining === 0) {
|
if (isTopLevelContext && attributes.async.remaining === 0) {
|
||||||
context.emit('end');
|
context.emit('end');
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,8 +1,14 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
var raptorDataProviders = require('raptor-data-providers');
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
render: function (input, context) {
|
render: function (input, context) {
|
||||||
var dataProvider = input.dataProvider;
|
var dataProvider = input.dataProvider;
|
||||||
|
|
||||||
|
var dataProviders = raptorDataProviders.forContext(context, false /* don't create if missing */);
|
||||||
|
|
||||||
var arg = input.arg || {};
|
var arg = input.arg || {};
|
||||||
|
|
||||||
arg.context = context;
|
arg.context = context;
|
||||||
context.beginAsyncFragment(function (asyncContext, asyncFragment) {
|
context.beginAsyncFragment(function (asyncContext, asyncFragment) {
|
||||||
function onError(e) {
|
function onError(e) {
|
||||||
@ -24,9 +30,9 @@ module.exports = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
context.requestData(dataProvider, arg, function(err, data) {
|
dataProviders.requestData(dataProvider, arg, function(err, data) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return onError(e);
|
return onError(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
renderBody(data);
|
renderBody(data);
|
||||||
|
|||||||
@ -72,7 +72,7 @@ function testRender(path, data, done, options) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
describe('raptor-templates/rhtml' , function() {
|
describe('raptor-templates/rhtml-async' , function() {
|
||||||
|
|
||||||
beforeEach(function(done) {
|
beforeEach(function(done) {
|
||||||
// for (var k in require.cache) {
|
// for (var k in require.cache) {
|
||||||
@ -88,19 +88,49 @@ describe('raptor-templates/rhtml' , function() {
|
|||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should render a simple template', function(done) {
|
it('should render a simple with async fragments correctly (1)', function(done) {
|
||||||
|
|
||||||
testRender('test-project/rhtml-templates/async-fragment-ordering.rhtml', {}, done, {
|
testRender('test-project/rhtml-templates/async-fragment-ordering.rhtml', {}, done, {
|
||||||
dataProviders: {
|
dataProviders: {
|
||||||
'D1': delayedDataProvider({delay: 100}),
|
'D1': delayedDataProvider(100),
|
||||||
'D2': delayedDataProvider({delay: 300}),
|
'D2': delayedDataProvider(300),
|
||||||
'D3': delayedDataProvider({delay: 200}),
|
'D3': delayedDataProvider(200),
|
||||||
'D4': delayedDataProvider({delay: 800})
|
'D4': delayedDataProvider(800)
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should render a simple with async fragments correctly (2)', function(done) {
|
||||||
|
testRender('test-project/rhtml-templates/async-fragment-ordering.rhtml', {}, done, {
|
||||||
|
dataProviders: {
|
||||||
|
'D1': delayedDataProvider(100),
|
||||||
|
'D2': delayedDataProvider(200),
|
||||||
|
'D3': delayedDataProvider(300),
|
||||||
|
'D4': delayedDataProvider(150)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should render a simple with async fragments correctly (3)', function(done) {
|
||||||
|
testRender('test-project/rhtml-templates/async-fragment-ordering.rhtml', {}, done, {
|
||||||
|
dataProviders: {
|
||||||
|
'D1': delayedDataProvider(800),
|
||||||
|
'D2': delayedDataProvider(200),
|
||||||
|
'D3': delayedDataProvider(300),
|
||||||
|
'D4': delayedDataProvider(100)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should render a simple with async fragments correctly (4)', function(done) {
|
||||||
|
testRender('test-project/rhtml-templates/async-fragment-ordering.rhtml', {}, done, {
|
||||||
|
dataProviders: {
|
||||||
|
'D1': delayedDataProvider(800),
|
||||||
|
'D2': delayedDataProvider(300),
|
||||||
|
'D3': delayedDataProvider(200),
|
||||||
|
'D4': delayedDataProvider(100)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -1,17 +1,17 @@
|
|||||||
1
|
1
|
||||||
<async:fragment dependency="D1" var="d1">
|
<async:fragment data-provider="D1" var="d1">
|
||||||
2
|
2
|
||||||
<async:fragment dependency="D2" var="d2">
|
<async:fragment data-provider="D2" var="d2">
|
||||||
3
|
3
|
||||||
</async:fragment>
|
</async:fragment>
|
||||||
4
|
4
|
||||||
<async:fragment dependency="D3" var="d3">
|
<async:fragment data-provider="D3" var="d3">
|
||||||
5
|
5
|
||||||
</async:fragment>
|
</async:fragment>
|
||||||
6
|
6
|
||||||
</async:fragment>
|
</async:fragment>
|
||||||
7
|
7
|
||||||
<async:fragment dependency="D4" var="d4">
|
<async:fragment data-provider="D4" var="d4">
|
||||||
8
|
8
|
||||||
</async:fragment>
|
</async:fragment>
|
||||||
9
|
9
|
||||||
Loading…
x
Reference in New Issue
Block a user