Магистраль: данные не добавлены в модель при получении () - PullRequest
2 голосов
/ 09 сентября 2011

У меня проблемы при попытке извлечь данные из моей модели Backbone с сервера. Вы получаете ответ в JSON от сервера, который, я думаю, выглядит правильно отформатированным. Вы видите что-то не так с этим? Похоже:

[{"id":"1","name":"Fawad Hassan","email":"fawad@test.com"},{"id":"2","name":"Bill 
Gates","email":"bill@test.com"},{"id":"3","name":"Steve 
Jobs","email":"steve@test.com"},{"id":"4","name":"Naveed 
Ahmad","email":"naveed@test.com"},{"id":"5","name":"Mr Zee","email":"zee@test.com"}]

Мой код для проекта Backbone выглядит следующим образом, и я тоже не могу найти проблему там.

window.AppModel = Backbone.Model.extend({
    url: function() {
        return 'http://dev.local/ci/index.php/site/userpost';
    }
});

window.AppContr = Backbone.Collection.extend({
    model: AppModel,
    initialize: function() {
        this.model = new AppModel;
    }
});

window.App = new AppContr({name: "Markus"});

window.AppView = Backbone.View.extend({
    el: $("#content"),
    initialize: function() {
        this.render();
    },
    render: function() {
        console.log(App.model.toJSON());
    }
});

App.model.fetch();
window.View = new AppView;

1 Ответ

8 голосов
/ 09 сентября 2011

Вы делаете fetch для модели, но возвращаете коллекцию в ответ. Это главная проблема.

Вторая проблема заключается в том, что вы вызываете render в AppView совершенно случайно, то есть он не имеет ничего общего с model или collection. Может быть, в model не будет ничего при рендеринге представления. Вы должны связать рендеринг с collection или model с bind. Чем всякий раз, когда вы звоните fetch, ваше представление будет перерисовываться, что является одним из основных преимуществ Backbone:)

Вот код:)

window.Person = Backbone.Model.extend({});

window.Addressbook = Backbone.Collection.extend({
    url: 'http://dev.local/ci/index.php/site/userpost',// declare url in collection
    model: Person
}

window.Addresses = new AddressBook();

window.AppView = Backbone.View.extend({
    el: $('#content'),
    initialize: function() {
        Addresses.bind('reset', this.render); // bind rendering to Addresses.fetch()
    },
    render: function(){
        console.log(Addresses.toJSON());
    }
});

window.appview = new AppView();
Addresses.fetch();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...