2013-01-10 193 views
1

我是新來的主幹,我試圖從服務器以Json格式發送和接收數據。它只是不會工作。這裏是我的代碼(順便說一句,我使用的骨幹光環):骨幹集合提取沒有觸發

收集

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'是如何工作的,解釋原因最直接的方法就是削減一些角落。關於'sync'覆蓋的細節在鏈接的答案中解釋。 – jevakallio