【问题标题】:Does it make sense to initialize models from the DOM in backbone.js?从backbone.js 中的DOM 初始化模型有意义吗?
【发布时间】:2011-07-03 04:37:55
【问题描述】:

backbone.js 依赖于 restful 应用程序来初始化模型,但是渐进增强呢?数据已经在 dom 中(或其中的一些),所以即使 html 元素存在,我的模型是否仍应调用 restful 接口?是否有其他库设计可能更适合这种情况?

【问题讨论】:

    标签: javascript html dom models backbone.js


    【解决方案1】:

    Backbone 可以很好地处理这个问题。我处理这种情况的方法是有一个工厂模型,它可以接收一个 DOM 节点并解析它以提取数据(id、字段等)。

    如果您为 View constructor 提供“el”选项,主干将不会获取或渲染模型,因此您可以保持节点不变。

    在数据更改后,控制器将同步到服务器。您必须小心包含应用程序运行所需的任何数据,无论它是否显示。

    【讨论】:

    • documentcloud.github.com/backbone/#FAQ-bootstrap 在渲染模板服务器端时,他们执行了一个巧妙的小技巧,将模型序列化为 json。我真的可以去任何一种方式。
    • @Arthur,这很有趣。您能否更详细地说明如何将 DOM 中的数据提取到模型中?
    • @Arthur,我同意这很有趣。我找不到其他人在写关于使用 JS MVC 框架做这种事情的博客,虽然对我来说进行网站开发是有意义的,但我想知道为什么没有其他人这样做。本质上我不想使用单页应用范例。
    【解决方案2】:

    您不应该使用 DOM 元素来使用后端数据初始化模型。你有一个非常好的基础设施和骨干,不这样做。当您依赖 DOM 时,只要 DOM 结构因设计而发生变化,您就需要更改 javascript。

    也不要依赖主干视图来创建模型。它必须反过来,模型决定页面上的视图。

    只需添加一个脚本元素并直接在其中创建您的 JS 对象。可以初始化集合、单个模型等。

    您可以对模板或 DOM UI 构建块做同样的事情:

    <script type="text/js-template">
      <!-- Your template as realy do elements or using a js templating engine like _.template-->
    </script>
    

    加载您的页面并让您的应用在本地运行。

    【讨论】:

    • 在我看来,不使用 DOM 的一个缺点是在初始数据加载时缺乏搜索引擎支持。
    • 不正确。我说的是不要在你的 JS 中根据你的 dom 加载数据。您将页面上的数据作为 JSON 加载(在标题、正文或其他内容中)。您的第一个加载的 dom 应该都在那里,并且您的 js 代码只是与它挂钩并使其与模型保持同步。
    • 所以数据在服务器端呈现在两个地方? (一次在 dom 中,一次在脚本中作为 JSON)
    • 这是避免闪烁和支持搜索引擎的最佳方式。
    猜你喜欢
    • 2012-08-30
    • 1970-01-01
    • 2017-02-21
    • 2014-11-27
    • 2015-01-12
    • 2020-10-11
    • 1970-01-01
    • 2023-02-24
    • 2021-04-01
    相关资源
    最近更新 更多