【问题标题】:loading a backbone.js collection on html page load在 html 页面加载时加载一个backbone.js 集合
【发布时间】:2012-03-13 20:59:41
【问题描述】:

我有一个关于backbone.js Web 应用程序架构的问题。假设您正在创建一个电影收藏 web 应用程序。您可以为电影使用模型,为电影集合使用集合。

collection 的 view 基本上是 li 的负载。

为了使网页可以被谷歌索引,你可以让它在没有 javascript 的情况下工作并在服务器端呈现。因此,访问 mydomain.com/12 将在服务器端为该集合构建 html li 元素。

如果您想使用backbone.js 来修改集合,您需要将数据加载到主干中。做这个的最好方式是什么?我能想到的两种方法是......

1) 使用 jquery 遍历将数据读入主干的 li 元素——这样做的问题是 html 可能只包含电影名称,而不是主干模型中可能需要的电影 id 的 /director 信息.我想数据可以包含在 html 中并使用 css 隐藏。

2) 丢弃列表中的所有内容并使用 ajax 从服务器重新加载它——这对我来说似乎是一种浪费,因为所有数据都可以在第一页加载时发送。

这些方法中的任何一种都是好的做法吗?如果没有,应该怎么做?

【问题讨论】:

    标签: backbone.js


    【解决方案1】:

    Backbone 的作者 Jeremy Ashkenas 建议您在页面中将模型数据打印为 JSON,并将其作为对象加载:

    <script>
      Accounts.reset(<%= @accounts.to_json %>);
      Projects.reset(<%= @projects.to_json(:collaborators => true) %>);
    </script>
    

    Backbone FAQ - Loading Bootstrapped Models

    【讨论】:

    • 感谢您的快速回复,最好这样做: 然后在 foo.js 文件中进行重置?
    • 我不能说哪个更好或更坏,我猜这取决于你如何设置你的项目!
    • 所以要讲述整个故事,您必须从 DOM 中丢弃服务器端生成的内容并在 Backbone 中再次呈现(当然无需额外的 AJAX 调用)?
    • opengrid:你不必这样做。我也渲染服务器端,所以对我来说这很有意义。
    • 我也有同样的问题。我必须渲染服务器端以进行索引,但是很难将这些元素恢复为带有所有事件处理程序等的主干视图。所以对我有用的是,当客户端启用了 JS 时,服务器生成的内容被渲染的引导 JSON 数据替换一路添加,没有任何额外的 AJAX 请求。如果我错了,请告诉我,还有更好的方法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    • 2018-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多