【问题标题】:Is having Django and Backbone.js double templates avoidable?是否可以避免使用 Django 和 Backbone.js 双模板?
【发布时间】:2013-10-23 03:41:45
【问题描述】:

我有一个复杂的非 SPA(不是单页应用程序),一个经典的多页站点,我想在其中使用 Backbone.js。

应用程序的服务器端由 Django 驱动。

我的问题是:出于 SEO 原因 我必须使用 django 模板在服务器端加载每个 html 内容,然后才能获得 Backbone 的全部功能我需要下划线的模板(或把手)来刷新我的主干视图

所以,我必须用不同的技术和钩子编写两次相同的模板。

我怎样才能避免这种情况?

【问题讨论】:

    标签: javascript django templates backbone.js


    【解决方案1】:

    基本上你可以做到这一点,你只需要确保你不会第一次在视图上调用渲染。

    说我的页面有这个html

    <ul class="my-list">
     <li><a href="#">do something</a></li>
     <li><a href="#">do something</a></li>
     <li><a href="#">do something</a></li>
    </ul>
    

    最初你定义一个视图

    var MyView =  Backbone.View.extend({
      el:'.my-list',
      render:function(){
        this.collection.each(this.addItem, this);
      },
      addItem:function(){
        //do adding logic here
      }
    })
    

    实例化使用,但不调用渲染

     var myView = new MyView({
        collection: myCollection //any collection or model you like here
     })
    

    当您想要更新视图时,请调用 myView.render。通过这种方式,您可以获得 SEO 和骨干的好处。我猜像 You Tube 这样的流行网络应用程序确实遵循了类似的方法(可能没有使用 Backbone)。

    【讨论】:

    • 是的,但我的问题是避免两次编写相同的模板:(
    • 由于 SEO 需要从服务器端渲染的完全计算的 html,我在这里看到的唯一方法是,在服务器端和客户端共享模板。不知道这对你来说有多可行
    【解决方案2】:

    其实,你可以写一个单页的应用程序,仍然支持 SEO。 Backbone 的路由器通过为应用程序的每个状态创建一个单独的 URL 来实现这一点。您在整个应用程序中的链接将被抓取。谷歌这些天在抓取 SPA 方面做得很好。我相信您决定不将您的网站创建为 SPA 是受到陈旧意见的影响。

    【讨论】:

    • 是的,我已经看到了,我的网站不打算成为 SPA,因为它并不完全基于 Backbone.js,只是一些关键部分
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-04
    • 1970-01-01
    • 2022-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多