【问题标题】:backbone.js translate django server template with backbone collection骨干网.js 用骨干集合翻译 django 服务器模板
【发布时间】:2013-02-17 23:55:37
【问题描述】:

我习惯于使用 http 请求来定义我的 django 视图,该请求使用我可以迭代和显示的 python 数据字典发回 http 响应。我正在尝试使用backbone.js 替换它。

目前我有这样的设置:

<ul id="teaching_students">

 {% for student in students.object_list %}
    <li class="selected">
      <span> {{ student.name }} </span>
    </li>
 {% endfor %}
</ul>

我想使用 ICanHaz.js 和 Mustache.js 作为 javascript 模板在客户端填写 {{ student.name}}

到目前为止,我使用了美味的派,我有一个 PersonResource,当通过以下 url 时,所有学生都以 json 对象的形式返回。

http://127.0.0.1:8000/api/people/?format=json
  1. 我是否需要在views.py 中为这个url 生成一个API 视图,如果需要,那是什么样的?
  2. 我如何在backbone.js 中调用这个url 并设置集合、视图和正确的路由?

我的客户端结构分解为views/models(我使用 require.js 将它们组合在一起)。

我正在使用几个插件来帮助弥合骨干和美味派(backbone-tastypie.js)之间的差距,但我真的很想看看其他人如何用 REST api 和骨干.js 取代传统的 django 模板渲染

编辑:添加主干模型,这是我正在使用的模型

define([
    'underscore',
    'backbone'
], function(_, Backbone) {

    var PersonModel = Backbone.Model.extend({

        defaults : {

        },

        initialize: function( options ) {

        },

        parse : function(res) {
            // because of jsonp
            return res.data;
        }

    });

    return PersonModel;

});

【问题讨论】:

    标签: backbone.js mustache tastypie icanhaz.js


    【解决方案1】:

    所以你想从服务器端渲染转移到客户端渲染?这意味着 您会产生额外的 http 请求。但这是可能的。

    我需要在views.py中为这个url生成一个API视图吗,如果需要的话 看起来像吗?

    一旦您指定了ModelResourceurlpattern,Tasty pie 就可以完成所有工作。 您无需在应用的 views.py 中添加其他函数来处理 http 请求-响应周期。

    1. 查看tasty pie tutorial 了解如何将您的资源挂接到网址。
    2. 使用像 Postman chrome extension 这样的测试 REST 客户端来查看是否一切正常。

    我如何在backbone.js中调用这个url并设置一个集合,查看 和正确的路线?

    1. 像对待其他任何 API 一样对待 API。将模型的url 字段设置为

      /api/people/?format=json

    2. 让你的视图监听PersonModelchange事件

    3. Fetch 模型。

    4. 在接收到数据时,使用您选择的模板引擎渲染视图。

    另请参阅Adding REST to Django,了解为 django 应用程序提供 RESTful 接口的选项。

    【讨论】:

    • 因此,通过创建一个监听 PersonModel 中任何更改的视图,我不必在骨干网中定义任何显式路由吗?然后我的应用程序如何到达此视图。
    • 视图必须注册一个回调来监听模型的变化...更多主干教程见stackoverflow.com/questions/8782704/backbone-js-tutorial
    • 感谢您的解释。我将发布一个更具体的问题和我得到的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-13
    • 2012-04-03
    相关资源
    最近更新 更多