2013-11-17 8 views
1

Я чувствую себя глупо, задавая вопрос, но я с ним, как 3 дня назад ... Я построил php api rest, который возвращает json encode info. JSON, что возвращает API правильно, что-то вроде этого:Чтение JSON Object возвращено из API REST

[ 
    {"pk_user":"1","name":"George","surname":"Littlewolf","profile":"Game designer - Developer"}, 
    {"pk_user":"2","name":"Anne","surname":"Carpenter","profile":"Developer"}, 
    {"pk_user":"3","name":"John","surname":"Sullivan","profile":"Designer"}, 
    {"pk_user":"4","name":"Judith","surname":"Lenders","profile":"Developer"}, 
    {"pk_user":"5","name":"Jason","surname":"Middleton","profile":"Manager"} 
] 

После этого я создаю позвоночник передний конец, чтобы атаковать апи. Я разработал только одно представление, которое читает json, который я написал выше. У меня есть одна модель (Пользователь) и одна Коллекция (пользователи), где я хочу сохранить информацию, прочитанную из json info.

Я собираюсь поставить только код функции визуализации представления:

render: function() { 
    var users = new Users(); 
    users.fetch(); 
    $.each(users['models'], function(i, item) { 
     console.log(item); 
    }); 


    this.template = _.template(template, {users : users}); 
    this.$el.html(this.template); 
    return this; 
} 

Теперь консоль возвращается только то, что вы видите на следующем изображении:

enter image description here

Я бы хотел получить доступ к элементам, но я не знаю, почему, но все, что я пробовал, не работает ... Спасибо и извините за объяснение новичков ... EDIT

У меня есть uploaded the code to a hosting всем, кто хочет увидеть проблему «на живом».

ответ

3

fetch является вызов AJAX, так это:

users.fetch(); 

не будет заполнять коллекцию сразу, она должна ждать ответа сервера. Поэтому, когда вы идете посмотреть на users.models, там ничего не будет, и ваш взгляд заканчивается, ничего не делая.

Обычный подход для прослушивания событий из users и визуализации HTML в ответ на эти события:

initialize: function() { 
    this.collection = new Users; 
    this.listenTo(this.collection, 'reset', this.render); 
    // bind to other events as needed... 
    this.users.fetch({ reset: true }); 
}, 
render: function() { 
    this.collection.each(function(user) { 
     // render the `user` model in here... 
    }); 
} 

Обратите внимание на переключателе this.collection.each вместо возни с коллекцией models напрямую.

В качестве альтернативы, используйте обработчик успеха при вызове fetch:

this.users.fetch({ 
    success: function(collection) { 
     collection.each(function(user) { 
      // render the `user` model in here... 
     }); 
    } 
}); 
+0

Он отлично работает. Спасибо за ответ, не только помогли мне решить проблему, но и у меня также есть понял, как это работает. – newpatriks

0

Не уверен, если это то, что вы хотите, но если вы хотите, чтобы войти атрибуты пользователя просто сделать это:

$.each(users['models'], function(i, item) { 
    console.log(item.attributes); 
}); 
+0

Я попытался это решение тоже и не работают. Я загрузил код, чтобы вы могли видеть проблему в Интернете. – newpatriks

+0

Извините, я не совсем понимаю, в чем проблема. Что я вижу в загруженном коде, так это то, что пользователи будут пустыми, так как код продолжает работать, а 'users.fetch()' получает объект JSON с сервера. Это ваша проблема? – Markinhos

+0

Коллекция Пользователи на самом деле не пустые. Проблема в том, что я не знаю, как получить доступ к каждому пользователю, который я загрузил внутри Пользователей. Фактически, то, что я печатаю на javascript-консоли, это 'users ['models']', и вы можете видеть, что существуют данные, но я не знаю, как получить доступ к информации о пользователе. Это может быть что-то вроде вашего первого комментария, но я не знаю, почему не работает :( – newpatriks

Смежные вопросы