2013-02-10 5 views
2

Я использую модель, как это:извлечённому JSON не заполняется в Backbone модели

var SidebarCategory = Backbone.Model.extend({ 
    urlRoot: 'sidebar', 
    defaults : { 
     title : '', 
     items: '' 
    } 
}); 

и извлечение этого JSON через GET:

{"id":"foo","title":"TITLE","items":"bar baz"} 

Но сама модель не принимает входящие данные ,

var foo = new SidebarCategory({id: 'foo'}); 
foo.fetch(); 

console.log(foo.toJSON()); 

Просто взять id и игнорировать остальные.

Я что-то пропустил? В чем может быть проблема?

+0

Попробуйте использовать хромированные инструменты или firebug. У обоих есть вкладка сети, где вы можете найти фактический запрос ajax, который был сделан. Затем вы можете увидеть, был ли запрос правильным и если ответ был верным. Если оба правильные, есть некоторые проблемы с инициализацией. Если запрос был неправильным, вы можете изучить это, если ответ был плохим, вы можете исследовать серверную сторону. но вам нужно отличить это в первую очередь. – scones

+0

Вышеупомянутый Json - это тот, который возвращается через GET. – LeMike

ответ

4

Как @CD указал на это, то fetch асинхронный, так у вас есть 2 варианта для обратного вызова как это:

foo.fetch({ 
success : function(data){ 
    console.log(JSON.stringify(data)); 
} 
}); 

ИЛИ

foo.fetch(); 

foo.on('reset',function(data){ 
    console.log(JSON.stringify(data)); 
},this); 

Для асинхронного вызова вы можете использовать либо одно из указанных выше.

3

fetch выполняет асинхронный HTTP (Ajax) запрос, так что вы должны пройти fetch успех обратного вызова:

foo.fetch({ 
    success: function(){ 
     console.log(foo.toJSON()); 
    } 
}); 
+0

Ну, мне кажется, мне нужен кофе. Справа - AJAX был сделан после console.log ... Это было глупо от меня. – LeMike

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