2013-05-25 6 views
2

Я мог бы просто быть слепым или что-то в этом роде, но я действительно не могу понять, почему я не могу получить доступ к под-объекту возвращаемого объекта $ Resource, который извлекал кучу объектов JSON.Не удается получить доступ к вспомогательному объекту возвращенного объекта JSON

Resource 
> $resolved: true 
> $then: function (b, g) {var j=e(),h= 
> data: Object 
    > 519bc5f6b2427a732be1c360: Object 

Необработанные JSON выглядит следующим образом:

{ 
    "data": { 
     "519bc5f6b2427a732be1c360": { 
      "id": "519bc5f6b2427a732be1c360", 
      "planning": { 
       "id": "519bc5f6b2427a732be1c355" 
      } 
     } 
    } 
} 

Может кто-нибудь объяснить мне, почему это не работает:

var training = Training.query() 

console.log(training); // returns the entire $Resource 
console.log(training.data); // returns: undefined 
+0

научная догадка: http://felix-kling.de/blog/2011/08/18/inspecting-variables-in-javascript-consoles/ PS: Если бы я был вами, я бы поставил перерыв (просто обычный или используя «отладчик») и проверил с помощью отладчика, что такое фактическое значение (верно, вы можете доверять отладчику, и вы не можете доверять 'console.log() ') – zerkms

+0

' .query() 'возвращает массив – Ven

+0

@ user1737909 Хорошо, но это уже разрешено на уровне моих сервисов, не добавляло этого; Я вручную установил .query() для возврата isArray: false; –

ответ

1

Попробуйте получить данные, как это:

var training = Training.query(function($val) { 
    console.log($val); 
    console.log($val.data); 
}); 
+0

Это работает! Теперь у меня другая проблема, но я мог бы это понять. Спасибо Вам за Ваш вклад! Функция закрытия, по-видимому, работала по какой-то причине, но я по-прежнему считаю это странное и неожиданное поведение. –

2

Вот объяснение - от the Angular docs:

Важно понимать, что вызов метода объекта $ ресурса немедленно возвращает пустую ссылку (объект или массив в зависимости от IsArray). Как только данные возвращаются с сервера, существующая ссылка заполняется фактическими данными. Это полезный трюк, поскольку обычно ресурс присваивается модели, которая затем отображается в виде. Наличие пустого объекта не приводит к рендерингу, как только данные поступают с сервера, тогда объект заполняется данными, и представление автоматически повторно отображает себя, показывая новые данные. Это означает, что в большинстве случаев никогда не нужно писать функцию обратного вызова для методов действий.

Так это работает:

var training = Training.query(function(value){ 
    // this is the callback function 
    console.log(training === value); // true - it's the same object 
    console.log(training.data); // and now it has data 
}); 
Смежные вопросы