2013-04-24 51 views
3

加载骨干应用程序时(我的应用程序就意味着加载的页面),我需要的初始收集的数据,和骨干文档说:如何加载骨干的自举模式在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> 

我不不明白这一点。剂量是否意味着我应该与初始数据显示页面类似

{{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> 

反正我对获得骨干收集的初始数据感到非常困惑。

+1

从骨干网的doc:“*请注意,取不应该被用来填充在页面加载的集合 - 在加载时所需的所有车型应该已经被自举地点。*”。这只是意味着你的数据应该加载页面本身,而不是通过大量的AJAX调用来异步加载。关于django的一部分,我不知道如何,但是你必须以JSON格式打印数据。 – Loamhoof 2013-04-24 15:03:16

+1

是的,为什么我问这个问题,“加载时需要的所有模型应该已经引导到位”,但是如何? – paynestrike 2013-04-24 15:04:57

+0

只需在您发送客户的页面中打印它们(这就是该示例的功能)。从来没有与Django合作过,无法帮助你做到这一点(如果我能在这里帮助你,我会发布一个答案)。 – Loamhoof 2013-04-24 15:07:20

回答

5

当关于引导骨干会谈,他们在谈论这一点:

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代码可以使用JS foo_models到访问该数据。

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

Django: Parse JSON in my template using Javascript

+0

谢谢machineghost它真的帮助很多! – paynestrike 2013-04-25 00:47:46

+0

:-)很高兴我能帮到 – machineghost 2013-04-25 01:06:56

+0

嗨,我确实得到了foo_models,但我怎么能得到这个变量在我的app.js – paynestrike 2013-04-25 02:00:13