2012-05-16 4 views
2

Я пытаюсь получить коллекцию с URL-адреса JSON. Позвоночник делает отправить запрос и делает получить ответ, но нет в коллекции нет models после него:Почему fetch() не работает?

Вот мой JavaScript:

stores.fetch(); 

JSON в ответ

[{"name":"Store 1"},{"name":"Store 2"},{"name":"Store 3"},{"name":"Store 4"}] 

HTTP-заголовок Content-Type в ответе application/json.

Почему он не загружается в коллекцию? Правильно ли JSON?

немного кода:

be.storeList.Item = Backbone.Model.extend({ 
    defaults: { 
     id: null, 
     name: null, 
     description: null 
    }, 
    initialize:function(attrs){ 
     attrs.id = this.cid; 
     this.set(attrs); 
    } 
}); 

be.storeList.Items = Backbone.Collection.extend({ 
    model: be.storeList.Item, 
    url:'/admin/stores' 
}); 

var stores = new be.storeList.Items(); 
stores.fetch(); 
console.log(stores.toJSON()); 
+0

доля немного больше кода, пожалуйста, является JSON URL на том же домене? –

+0

Да, позвоночник отправляет запрос и получает ответ. – user19878

+1

мы можем видеть весь ваш код. не видя этого, это может быть много вещей - вы переопределяете метод разбора? как вы знаете, что данных нет в коллекции? вы используете метод get («name»), чтобы увидеть это, или ошибочно называя x.name? – bluedevil2k

ответ

3

fetch является асинхронным. Попробуйте

stores.fetch({ 
    success:function() { 
     console.log(stores.toJSON()); 
    } 
}); 

или

stores.on("sync", function() { 
    console.log(stores.toJSON()); 
}); 
stores.fetch(); 

или

stores.fetch().then(function() { 
    console.log(stores.toJSON()); 
}); 
1

Избавьтесь от функции инициализации в классе Item. Вам это не нужно.

Там нет такого понятия, как stores.models - если вы хотите увидеть, что в нем, вы должны сделать console.log(stores.toJSON());

+0

Все еще не работает. – user19878

+0

Нет такой вещи, как store.models - если вы хотите увидеть, что в ней, вам нужно сделать console.log (stores.toJSON()); – bluedevil2k

+0

Существует, и он находится в документации backbone.js к коллекции. Кроме того, это работает отлично: var stores = new be.storeList.Items ([{"name": "Store 1"}, {"name": "Store 2"}, {"name": "Store 3"} , {"name": "Store 4"}]); – user19878