3

加载主干应用程序时(对于我的应用程序,这意味着页面已加载),我需要初始收集数据,并且主干文档说:

<script>
  var accounts = new Backbone.Collection;
  accounts.reset(<%= @accounts.to_json %>);
  var projects = new Backbone.Collection;
  projects.reset(<%= @projects.to_json(:collaborators => true) %>);
</script>

我不明白这一点。剂量这意味着我应该使用初始数据呈现页面,例如

{{collection_initial_data}}

我在后端使用 django,那么如何将上面的代码翻译成 django 模板,比如

 <script>
  var accounts = new Backbone.Collection;
  accounts.reset({{ @accounts.to_json }});
  var projects = new Backbone.Collection;
  projects.reset({{ @projects.to_json(:collaborators => true) }});
</script>

无论如何,我对获取骨干收集的初始数据感到非常困惑。

4

1 回答 1

5

当 Backbone 谈论引导时,他们在谈论这个:

http://documentcloud.github.io/backbone/#FAQ-bootstrap

换句话说,他们说你应该在你的 Django HTML 模板中的脚本标签中写出你的模型的内容。

例如,假设您的 Django 上下文有一个名为“foo_models”的变量,其中包含所有 foo 模型的 JSON 表示。您想编辑您的 Django 模板以执行以下操作:

<script>
var foo_models = new FooCollection({{foo_models}});
</script>

通过这种方式,您可以保证您的数据在页面加载时已准备就绪,并且您的 JS 代码可以使用 JSfoo_models访问该数据。

现在,您的困惑似乎在于如何首先制作foo_modelsPython/Django 变量。我建议在您的视图逻辑中执行此操作,而不是在模板中,因为在那里您可以使用 Python 及其库的全部功能来序列化 JSON。但是,如果您确实想在视图中执行此操作,则可以使用与您指定的语法非常相似的语法来执行此操作;查看此 SO 问题的第二个答案:

Django:使用 Javascript 在我的模板中解析 JSON

于 2013-04-24T23:03:44.487 回答