我正在尝试使用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
知道出了什么问题吗?完全难倒!
答案 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);
}
});