Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jinja2、Backbone.js和渐进式增强_Backbone.js_Jinja2 - Fatal编程技术网

Jinja2、Backbone.js和渐进式增强

Jinja2、Backbone.js和渐进式增强,backbone.js,jinja2,Backbone.js,Jinja2,我有一个工作网站建立在谷歌应用程序引擎(Python+Jinja2模板引擎)之上。我想开始使用Backbone.js和下划线.js将其重新设计为单页应用程序。目标是使用渐进增强策略 在第一次访问时,网站仍将使用后端呈现。然后,如果浏览器支持JavaScript,Backbone.js将接管 我决定这样做有两个原因。首先,我已经拥有的所有链接将保持不变,其次,谷歌索引机器人将能够抓取网站内容 这种方法有两个问题: 我需要为我的站点上的几乎所有内容提供两个模板,一个在后端(Jinja2),一个在前端

我有一个工作网站建立在谷歌应用程序引擎(Python+Jinja2模板引擎)之上。我想开始使用Backbone.js和下划线.js将其重新设计为单页应用程序。目标是使用渐进增强策略

在第一次访问时,网站仍将使用后端呈现。然后,如果浏览器支持JavaScript,Backbone.js将接管

我决定这样做有两个原因。首先,我已经拥有的所有链接将保持不变,其次,谷歌索引机器人将能够抓取网站内容

这种方法有两个问题:

  • 我需要为我的站点上的几乎所有内容提供两个模板,一个在后端(Jinja2),一个在前端(underline.js)。我想知道在这种情况下的最佳实践是什么?你有什么建议可以避免每件事都有两个模板吗

  • 如何为前端加载模板以使用Backbone.js+下划线.js?我可以在初始请求中加载它们,或者在需要时异步请求它们

  • 我很感激你的任何想法! 谢谢

    一些资源:

    下面介绍如何将Backbone.js绑定到现有HTML: 所以我最近(今年)也经历了类似的情况。我会让你知道时间的头,1是一件非常难处理的事情。请记住,您不仅需要复制模板,还需要复制站点周围的所有业务逻辑。例如,假设您允许用户在特定页面上添加注释。使用您描述的方法,您必须在服务器端和客户端都有一个注释模板,此外,还要复制在客户端和服务器上添加/删除/编辑注释所需的逻辑(以适应使用和不使用javascript的用户)。使用Jinja2功能块复制模板很容易,但逻辑的复制才是有趣的地方。我试着这么做,几个月后又重新写了一遍

    因此,我给你的建议是放弃支持javascript和非javascript用户的想法。为其中之一创建站点。我个人选择走javascript路线。这就给你留下了两个选择。制作一个单页应用程序,或者制作一个主要利用javascript实现功能的应用程序,但在服务器端呈现所有内容。可能还有很多其他选择,但这是我见过的两个最受欢迎的选择。我选择了第二种选择。所以我要做的是,初始页面加载由服务器完成。然后,Backbone.js将使用每个元素并从中生成模型和视图。这主要是通过利用
    数据
    属性来实现的。例如,要创建一个注释视图,我将使用如下元素:

    <div class="comment" data-id="1" data-body="You Suck"></div>
    
    最后,我将使用创建的模型支持一个视图,然后可以向站点添加功能:

    var CommentView = Backbone.View.extend({
        initialize: function() {},
        edit: function() {},
        delete: function() {}
    });
    
    var comment_view = new CommentView({
        model: comment_model
    });
    

    然后你可能会问,“如果我需要重新呈现一些东西,我不需要客户端模板吗?”不。客户端模板是一个非常新的东西。我个人尽量避免使用它们,因为我认为我们还没有做到这一点,而且我一直觉得单页应用程序对我的口味反应不够灵敏。我肯定有很多人不同意我的观点,但这就是我在最近的项目中所采取的立场。也就是说,我在服务器上呈现所有内容,并以JSON的形式将html发送到客户端,然后将其注入DOM。所以我有很多api端点,它们将JSON返回到我的Backbone.js代码中。这就是我目前正在解决的问题,但这个问题通常主要是情境性的。你必须认真考虑你的需求是什么。值得一提的是,我目前的系统很大程度上是基于Twitter在尝试了整个单页应用程序之后最终决定做的事情。您可以阅读。

    非常感谢您提供这样一个描述性的答案。现在呢?客户端模板是否仍然未经验证?
    var CommentView = Backbone.View.extend({
        initialize: function() {},
        edit: function() {},
        delete: function() {}
    });
    
    var comment_view = new CommentView({
        model: comment_model
    });