Backbone.js как работать с выбранными элементами - PullRequest
0 голосов
/ 20 сентября 2011

Я пытаюсь выучить Backbone.js и, похоже, у меня проблема с извлечением из модели.У меня есть:

window.News = Backbone.Model.extend({
    urlRoot: "/rest/news"
});

window.NewsItems = Backbone.Collection.extend({
    model: News,
    url: "/rest/news"
});

window.NewsView = Backbone.View.extend({
    el: $(".newsItem"),

    events: {
        "click .edit": "editNews" 
    },

    editTemplate: $('#tmpl-edit-news-item').template(),

    editNews: function(evt) {
        console.log("EDIT CLICKED");
        var ele = $(evt.target);
        var news = new News({id:1});
        news.fetch();
        console.log(news);
        console.log(news.get('title');
     }

});

new NewsView();  

У меня есть элементы на странице, которые имеют класс = "edit" data-id = "$ ID".Когда я нажимаю на элемент, все идет как положеноBackbone запускает функцию editNews, в консоли появляется «EDIT CLICKED», а console.log (news) выводит объект.Внутри этого объекта я заметил, что есть поле атрибутов, которое содержит json элемента новостей, загруженного сервером.Так что сервер работает и отправляет обратно json.Существует поле заголовка, которое установлено на «Test News Title», но при запуске console.log (news.get ('title')) возвращает неопределенное значение.

Нужно ли передавать извлеченные данные чему-либо, чтобы превратить их в базовую модель?Я подумал, что при использовании fetch он взял возвращенные данные json и поместил их в модель.

Дополнительная информация:

url requested: http://localhost/rest/news/1  
response data: {"class":"org.backbonetest.News","id":1,"content":"This is test content","dateCreated":"2011-09-20T16:19:56Z","lastUpdated":"2011-09-20T16:19:56Z","shortDescription":"","title":"Test News Title"}

Ответы [ 2 ]

3 голосов
/ 21 сентября 2011

Должно быть так:

editNews: function(evt) {
    console.log("EDIT CLICKED");
    var ele = $(evt.target);
    var news = new News({id:1});

    // fetch is asynchronous process so we will bind handler to model's change event
    news.bind('change', function(model, value) {
        console.log(news);
        console.log(news.get('title');
    }, this)
    news.fetch();
 }
1 голос
/ 21 сентября 2011

Хорошо, так как выборка асинхронная, я не могу сразу вызвать console.log. Добавление функции успеха позволяет объекту работать как модель.

var news = new News({id:1});
news.fetch();
console.log(news);
console.log(news.get('title');  

Становится

news.fetch({success: function() {
                        console.log(news.get("title"));
                     },
                     processData: true
           });  

Возвращает правильный заголовок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...