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-render-context": "~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",
|
||||
"char-props": "~0.1.5"
|
||||
},
|
||||
|
||||
@ -81,6 +81,7 @@ module.exports = {
|
||||
.on('error', callback);
|
||||
}
|
||||
|
||||
// console.log(attributes.async);
|
||||
if (isTopLevelContext && attributes.async.remaining === 0) {
|
||||
context.emit('end');
|
||||
}
|
||||
|
||||
@ -1,8 +1,14 @@
|
||||
'use strict';
|
||||
var raptorDataProviders = require('raptor-data-providers');
|
||||
|
||||
module.exports = {
|
||||
render: function (input, context) {
|
||||
var dataProvider = input.dataProvider;
|
||||
|
||||
var dataProviders = raptorDataProviders.forContext(context, false /* don't create if missing */);
|
||||
|
||||
var arg = input.arg || {};
|
||||
|
||||
arg.context = context;
|
||||
context.beginAsyncFragment(function (asyncContext, asyncFragment) {
|
||||
function onError(e) {
|
||||
@ -24,9 +30,9 @@ module.exports = {
|
||||
}
|
||||
}
|
||||
try {
|
||||
context.requestData(dataProvider, arg, function(err, data) {
|
||||
dataProviders.requestData(dataProvider, arg, function(err, data) {
|
||||
if (err) {
|
||||
return onError(e);
|
||||
return onError(err);
|
||||
}
|
||||
|
||||
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) {
|
||||
// for (var k in require.cache) {
|
||||
@ -88,19 +88,49 @@ describe('raptor-templates/rhtml' , function() {
|
||||
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, {
|
||||
dataProviders: {
|
||||
'D1': delayedDataProvider({delay: 100}),
|
||||
'D2': delayedDataProvider({delay: 300}),
|
||||
'D3': delayedDataProvider({delay: 200}),
|
||||
'D4': delayedDataProvider({delay: 800})
|
||||
'D1': delayedDataProvider(100),
|
||||
'D2': delayedDataProvider(300),
|
||||
'D3': delayedDataProvider(200),
|
||||
'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
|
||||
<async:fragment dependency="D1" var="d1">
|
||||
<async:fragment data-provider="D1" var="d1">
|
||||
2
|
||||
<async:fragment dependency="D2" var="d2">
|
||||
<async:fragment data-provider="D2" var="d2">
|
||||
3
|
||||
</async:fragment>
|
||||
4
|
||||
<async:fragment dependency="D3" var="d3">
|
||||
<async:fragment data-provider="D3" var="d3">
|
||||
5
|
||||
</async:fragment>
|
||||
6
|
||||
</async:fragment>
|
||||
7
|
||||
<async:fragment dependency="D4" var="d4">
|
||||
<async:fragment data-provider="D4" var="d4">
|
||||
8
|
||||
</async:fragment>
|
||||
9
|
||||
Loading…
x
Reference in New Issue
Block a user