2013-01-10 2 views
1

Я новичок в магистрали, и я пытаюсь отправить и получить данные с сервера в формате Json. Это просто не сработает. Вот мой код (BTW, я использую магистральную ауру):Магистральная коллекция fetch not firing

Коллекция

define(['sandbox', '../models/message'], function(sandbox, Message) { 
'use strict'; 

var Messages = sandbox.mvc.Collection({ 
    model: Message, 
    url: '/messagelist.php', 
    localStorage: new sandbox.data.Store('messages-backbone-require'), 
    parse: function(response){ 
     return response.rows; 
    } 
}); 

return Messages; 

}); 

Модель

define(['sandbox'], function(sandbox) { 
'use strict'; 

var Message = sandbox.mvc.Model({ 

    defaults: { 
     opened: '', 
     messageid: '', 
     phonenumber: '', 
     numbername: '', 
     text: '' 
    }, 
    parse: function(data){ 
     return data; 
    } 

}); 

return Message; 
}); 

Посмотреть

define(['sandbox', '../models/message', 'text!../templates/incoming_messages.html'], function(sandbox, Message, incomingMessagesTemplate) { 
'use strict'; 

var AppView = sandbox.mvc.View({ 
    widgetTemplate: sandbox.template.parse(incomingMessagesTemplate), 

    events: { 
     'click .refresh': 'refresh' 
    }, 

    initialize: function() { 
     this.$el.html(this.widgetTemplate); 
     sandbox.events.bindAll(this); 
     this.collection.bind('createMessageList', this.createMessageList); 
    }, 

    createMessageList: function() { 
     // Will work with the received data here 
    }, 

    render: function() { 
     var handle = 'h4'; 
     this.$el.draggable({handle: handle}); 
     this.createMessageList(); 
    }, 

    refresh: function() { 
     this.createMessageList(); 
    } 


}); 

return AppView; 

}); 

Главная

define(['sandbox', './views/app', './collections/messages'], function(sandbox, AppView, Messages) { 
'use strict'; 

return function(options) { 
    var messages = new Messages(); 

    new AppView({ 
     el: sandbox.dom.find(options.element), 
     collection: messages 
    }).render(); 

    messages.fetch({ 
     data: { 
      type: 'incoming', 
      offset: 0, 
      offsetcount: 25 
     }, 
     type: 'GET', 
     success: function() { 
      console.log(messages.models); // Shows an empty array. 
     } 
    }); 
}; 
}); 

У меня проверены журналы, и кажется, что запрос ajax (collection.fetch()) не запускается или не может связываться с сервером. Как я могу это исправить?

ответ

2

Проблема с плагином Backbone.LocalStorage. Когда вы назначаете Collection.localStorage, плагин берет команду fetch и считывает данные из локального хранилища вместо сервера.

См. Мои answer in this SO question о некоторых вариантах решения этой проблемы.

+0

Не использует ли локальный накопитель плагин 'Backbone.sync', а не' fetch'? Но это просто выбор. –

+0

@muistooshort, yessir, вопрос OP о 'fetch' не срабатывает, и, не зная, знает ли он, как работает' sync', самый простой способ объяснить причину - разрезать некоторые углы. В связанном ответе объясняется резкое изменение порядка синхронизации. – jevakallio