2012-02-08 1 views
1

До сих пор у меня есть следующий код, но не кажется, что это работает, и я не знаю, когда Асинхронная завершена:JavaScript: Backbone.js fetch json и загрузить его в коллекцию моделей?

var item = Backbone.Model.extend({ 
    defaults: { 
     id: 0, 
     an_id: 0, 
     strval: null, 
     th_id: 0, 
     text: null 
    }, 
    url: 'page.php', 
    options: { 
     success: function(data) { 
      alert('s: ' + dump(data)); 
      // the dump function is my way of dumping objects into a string, 
      // use console.log if you want, as I have that disabled 
     }, 
     error: function(x, t, e) { 
      alert('e: ' + t + ', ' + e); 
     } 
    } 
}); 

var coll = Backbone.Collection.extend({ 
    model: item 
}); 

var options = new Options(); 
Backbone.sync("create", coll, item.options); // 'undefined' is not an object (evaluating c.url) in backbone-min.js 

Update

Я изменил исходный код для того, что у меня есть сейчас, и бэкэнд теперь может отличать запросы New, Update, Save и Delete.

Я до сих пор не могу узнать, как заполнить коллекцию coll.

+0

Это зависит от того, что вы хотите сделать. Как правило, вам нужно подключить представление к вашей модели и привязать метод рендеринга вашего представления к событиям, которые вы моделируете. Если вы извлекаете, привяжите событие сброса к вашим представлениям рендеринга, поскольку сброс будет срабатывать, как только ответ вернется с сервера. – kinakuta

+0

@kinakuta, я понятия не имею, как это сделать, спасибо! –

ответ

1

Backbone.Collection предназначено для хранения нескольких элементов - вы, кажется, пытаетесь получить свою коллекцию «наследовать» от вашей модели, что является неправильным подходом.

Коллекции заказываются наборы моделей. Вы можете связать события «change» чтобы получать уведомление, когда какая-либо модель в коллекции была изменена, прослушать события «добавить» и «удалить», извлечь коллекцию с сервера и использовать полный набор Underscore.js методы.

+0

Как я уже говорил, я только начал использовать эту библиотеку. У вас есть окончательное предложение о том, как хранить модели списков (правильно) и слушать изменения, добавлять и удалять события и получать список доступных коллекций? –

+0

Я обновил свой код, как я могу заполнить свою коллекцию предметов? –

0

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

coll.fetch({ 
     success: function() { 
      alert("success"); 
      console.log(coll.toJSON()); 
     }, 
     error: function(){ 
      alert("error")} 
    });  
+0

Вызывается обработчик успеха, но функция 'toJSON()' отображает пустую строку. –

+0

звучит так, как будто ваш вызов api настроен неправильно. Я бы спросил, можете ли вы пойти в инструмент разработчика в своем браузере, чтобы узнать, какие сетевые вызовы сделаны, см., Что возвращает ваш звонок. также полезный инструмент для тестирования вызовов api: (для хрома) https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CDAQFjAA&url=https%3A% 2F% 2Fchrome.google.com% 2Fwebstore% 2Fdetail% 2Fhgmloofddffdnphfgcellkdfbfbjeloo & ei = Ge4yT5LwG83LrQfy0fGsDA & usg = AFQjCNFbhSdZTBn3IVB6kaplCJIs613x_Q – Lucas

+0

Я обновил свой код, как я могу поместить свою коллекцию предметов? –