我正在尝试让渐进式渲染在Marko和Koajs中工作。
首先,我使用request-promise模块为JSON数据提要做出承诺。
rp = require('request-promise')
function getDataFeed() {
var url = "http://api.dronestre.am/data";
var options = {
url: url,
headers: { 'User-Agent': 'request' },
};
rp(options).then(function(result) {
var info = JSON.parse(result);
return info.strike;
});
};然后,我使用koa路由器和Marko加载一个模板,提要将作为数据放入其中
// router method to serve first visualization
router.get('/first', function *() {
let data = {
strikes : getDataFeed()
};
this.body = marko.load('./views/first.marko').stream(data);
this.type = "text/html";
})最后,在我的模板中,我使用async-fragment来指示应该异步加载页面的一部分:
<async-fragment data-provider='data.strikes' var='strikes' client-reorder='true'>
<async-fragment-placeholder>
<p>Loading...</p>
</async-fragment-placeholder>
<for each="strike in strikes">
<tr>
<td>${strike.number}</td>
<td>${strike.country}</td>
<td>${strike.date}</td>
<td>${strike.narrative}</td>
<td>${strike.town}</td>
<td>${strike.deaths}</td>
<td>${strike.target}</td>
<td>${strike.lat}</td>
<td>${strike.lon}</td>
</tr>
</for>
</async-fragment>不幸的是,async-fragment块从来没有加载过任何东西。甚至连占位符都没有。
我如何让占位符显示,然后让数据在我的模板中取代它的位置?
发布于 2015-11-20 11:47:23
问题解决了!我需要在getDataFeed()中返回promise函数
解决方案:
rp = require('request-promise')
function getDataFeed() {
var url = "http://api.dronestre.am/data";
var options = {
url: url,
headers: { 'User-Agent': 'request' },
};
return rp(options).then(function(result) {
var info = JSON.parse(result);
return info.strike;
});
};https://stackoverflow.com/questions/33818478
复制相似问题