我目前无法找到一个很好的解决方案来确定服务器端如何/何时“渲染”(生成html for)数据,而不是通过客户端的Ajax请求渲染数据。
这是一个示例问题。
我的客户端代码在每个页面上都有一个搜索栏,应该在用户点击“提交”之前提供搜索结果预览。其路线为/ajax/search?query=...
。
用户点击提交后,客户端会向路由/results
发送请求,并会返回结果页面。
我可以想到两种选择,两者似乎都有利有弊。
我可以在服务器上使用Jade(或其他一些模板引擎)渲染所有生成的html代码,如下面的调用(在Node.js中完成):
app.get('/results', function(request, response) {
var results = getResultsFrom(request);
response.render('resultsPage', results);
});
或者我可以发回一个如下所示的空白html页面:
HTML
<div class="search_results"></div>
<script id="search_result_template" type="text/handlebars-template">
<!-- Client side template code -->
</script>
的Javascript
// Type should be of the form '/ajax/search?=...'
results.url = "/ajax/search"+ $(location).attr('search')
results.fetch();
// Render the html generate inside the .search_results div
resultsView.render();
在客户端上呈现允许更少的冗余代码(我的Jade模板没有做我的Handlebars模板已经可以做的事情)并且我可以访问DOM之外的数据(它们存在于模型中,通过Backbone)。 / p>
在服务器上进行渲染允许对服务器进行少量调用,并且用户不必等待加载原始页面以及完成第二个ajax请求以查看结果。
非常感谢任何有关潜在解决方案的建议。