1

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

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

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

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

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

4

2 回答 2

1

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

于 2013-10-15T13:19:51.497 回答
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)。

于 2013-10-15T16:20:06.940 回答