Коллекции Backbone.js, не использующие модели (используя Code Igniter) - PullRequest
2 голосов
/ 29 декабря 2011

Я пытаюсь разработать сайт с использованием CodeIgniter и Backbone.js, но у меня возникает проблема при попытке установить Модели в коллекцию, для которой я вызвал fetch ().Я использую REST API от Phil Sturgeon и получаю ответ JSON при использовании fetch () для Collection, но к нему не добавляются дочерние модели.

Вот используемый мной 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);
        }
    }
}

И при попытке получить () Модели для Коллекции через консоль, например:

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

Он получаетJSON отвечает, но все еще говорит: «Дочерних объектов нет» (см. Изображение):

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

Есть идеи, что происходит не так?Совершенно в тупик!

1 Ответ

1 голос
/ 29 декабря 2011

экспликация

Это нормально, что people.models пусто напрямую после вызова fetch (), вам нужно дождаться окончания запроса 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);
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...