javascript - 无法从 backbone.js 教程填充 Backbone 集合

标签 javascript django backbone.js underscore.js tastypie

我正在这里学习主干教程:http://backbonetutorials.com/

我使用 django + tastypie 作为 restful api 和 backbone + underscore,正如教程建议的用于前端。

但是,我无法遍历我获取的用户集合。

这是我的代码(在 django 模板中):

{% extends "my_app/base_template.html" %}

{% block scripts %}

  <script type="text/template" id="users_template">
    <table class="table striped">
      <thead>
        <tr>
          <th>username</th>
        </tr>
      </thead>
      <tbody>
        <% _.each(users, function(user) { %>
          <tr>
            <td><%= user.get('username') %></td>
          </tr>
        <% }); %>
      </tbody>
    </table>
  </script>

  <script type="application/javascript">
    $(document).ready(
      function() {

        var Users = Backbone.Collection.extend({
          url : "/api/q/user/"
        });

        var UserList = Backbone.View.extend({
          el : ".user_list",
          render : function() {
            var that = this;
            var users = new Users();
            users.fetch({
              success : function(users) {
                var template = _.template($("#users_template").html());
                {# I think that the problem is around here #}
                that.$el.html(template({users : users.models}));
              }
            });
          }
        });

        var user_list = new UserList();

        var Router = Backbone.Router.extend({
          routes : {
            "" : "index"
          }
        });

        var router = new Router();

        router.on("route:index", function(){
          user_list.render();
        });

        Backbone.history.start();

      }
    );
  </script>

{% endblock %} {# /scripts #}

{% block content %}

  <div class="my_stuff">
    <div class="user_list"/>
  </div>

{% endblock %} {# /content #}

而且我可以确认转到“my_domain/api/q/user/”会返回正确的内容(2 个用户:管理员和另一个用户“bob”):

{
  "meta": {
  "limit": 20, 
  "next": null, 
  "offset": 0, 
  "previous": null, 
  "total_count": 2
}, 
"objects": [
  {
    "date_joined": "2014-11-04T04:28:17", 
    "email": "bob@bob.com", 
    "first_name": "Bob", 
    "id": 2, 
    "is_active": true, 
    "is_staff": false, 
    "is_superuser": false, 
    "last_login": "2014-11-04T05:13:46.908539", 
    "last_name": "Bobbington", 
    "password" : "some hash",
    "resource_uri": "/api/q/user/2/", 
    "username": "bob"
  }, 
  {
    "date_joined": "2014-11-03T13:44:04.356967", 
    "email": "admin@domain.com", 
    "first_name": "", 
    "id": 1, 
    "is_active": true, 
    "is_staff": true, 
    "is_superuser": true, 
    "last_login": "2014-11-04T06:06:51.336317", 
    "last_name": "", 
    "password": "some_hash", 
    "resource_uri": "/api/q/user/1/", 
    "username": "admin"
  }] 
}

那么,我做错了什么?我应该将 {{{users.models}} 以外的东西传递给模板吗?我是否错误地遍历了该结构?

谢谢。

最佳答案

开箱即用,Backbone 希望您的对象成为响应的根。如果不是,则需要一些帮助来确定在实例化模型对象时可以使用响应的哪一部分。

基本上你只需要定义一个 Backbone 模型并添加你自己的解析函数:

var user = Backbone.Model.extend({
    parse: function(response) {
        return response.objects;
    }
});

现在您的模型将知道在哪里可以找到您要设置的属性。

关于javascript - 无法从 backbone.js 教程填充 Backbone 集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26739354/

相关文章:

javascript - 如何使用 d3.js 将文本在 svg 图像上居中?

javascript - 获取文本区域内当前光标位置下的文本

javascript - 在 Backbone 中多次初始化 View

node.js sails.js 自定义创建初学者

django - 序列化外键的外键(DRF)

backbone.js - 使用 Jasmine 监视 Backbone.js View 函数

javascript - WebDriver NodeJS 使用功能实例化 IE 驱动程序 : introduceFlakinessByIgnoringProtectedModeSettings(ignoreSettings)

javascript - 值为 NULL 时无法读取未定义的属性长度

python - 如何在 Django 中将 QuerySet 转换为列表?

python - 抽象模型的最佳文件夹结构