Backbone.js不应用模型的集合(使用Code Igniter)

时间:2011-12-29 00:20:52

标签: codeigniter rest backbone.js

我正在尝试使用CodeIgniter和Backbone.js开发一个站点,但是在尝试将模型设置为我已调用fetch()的Collection时,我遇到了一个问题。我正在使用Phil Sturgeon的REST API,并且在Collection上使用fetch()时收到JSON响应,但没有添加子模型。

这是我正在使用的javascript:

$(document).ready(function() {
    window.Person = Backbone.Model.extend({});
    window.People = Backbone.Collection.extend({
        model: Person,
        url: "/api/content/users/format/json"
    });
});

我的CI控制器:

require APPPATH.'/libraries/REST_Controller.php';

class Content extends REST_Controller   {    
    function users_get()    {       
        $users = array(
            array('id' => 1, 'name' => 'Some Guy', 'email' => 'example1@example.com'),
            array('id' => 2, 'name' => 'Person Face', 'email' => 'example2@example.com')
    );

        if($users) {
            $this->response($users, 200); // 200 being the HTTP response code
        } else {
            $this->response(array('error' => 'Couldn\'t find any users!'), 404);
        }
    }
}

当尝试通过控制台获取()Collection的模型时,如:

peoples = new People();
peoples.fetch();
peoples.models;

它获得了JSON响应,但仍然说“没有子对象”(见图片):

http://i.stack.imgur.com/e5vZv.png

知道出了什么问题吗?完全难倒!

1 个答案:

答案 0 :(得分:1)

吃茶

在fetch()调用之后people.models为空直接是正常的,您需要等待ajax请求的结束。

确实,fetch() 异步,Backbone JS文档说:

  

<强> collection.fetch([选项])

     

[...]选项哈希采用成功和错误回调,它们将作为参数传递(集合,响应)。

来源:http://documentcloud.github.com/backbone/#Collection-fetch

解决方案

您需要使用:

peoples = new People();
peoples.fetch({
    success: function (collection, response) {
        // The collection is filled
        console.log('Models : ', peoples.models);
    }
});