服务器视图模板与具有ajax请求的客户端模板

时间:2013-10-10 19:49:21

标签: javascript html ajax handlebars.js pug

我目前无法找到一个很好的解决方案来确定服务器端如何/何时“渲染”(生成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请求以查看结果。

非常感谢任何有关潜在解决方案的建议。

0 个答案:

没有答案