這是一個來自JS新手的兩部分問題。BackboneJS with XML ajax
所以,我試圖創建一個使用requireJS的主幹應用程序,方法如下:Thomas Davis's tutorial。
我該如何去創建一個Ajax調用中的Backbone集合到一個提供XML數據的服務器? collections.fetch()似乎期待JSON後端。
在嘗試一些事情時,我結束了以下代碼,其中在從Ajax success-callback中填充集合「bookStore」時頁面不刷新。
這是我到目前爲止得到了多少。
var bookListView = Backbone.View.extend({ el: $("#books"), initialize: function() { thisView = this; $.ajax({ type: "GET", url: "books.xml", dataType: "xml", success: function (data) { console.log(data); $(data).find('book').each(function (index) { var bookTitle = $(this).find('name').text(); bookStore.add({ title: bookTitle }); console.log(seid); }); thisView.collection = bookStore; thisView.collection.bind('add', thisView.tryBind); } }).done(function (msg) { alert("Data retrieved: " + msg); }); this.collection = bookStore; this.collection.bind("add", this.exampleBind); this.collection.bind("refresh", function() { thisView.render(); }); /* // This one works! bookStore.add({ name: "book1" }); bookStore.add({ name: "book2" }); bookStore.add({ name: "book3" }); */ }, tryBind: function (model) { console.log(model); }, render: function() { var data = { books: this.collection.models, }; var compiledTemplate = _.template(bookListTemplate, data); $("#books").html(compiledTemplate); } });
在這裏,成功回調中的「初始化」功能似乎是正確處理數據並添加到集合中。但是,頁面不刷新。
當我單步執行Firebug控制檯時,頁面會刷新。我該如何解決這個問題?
nikoshr,非常感謝。我試過了。而且,它的工作原理。 – Karthik
還有一個問題。我應該從路由器代碼執行獲取嗎?如果我這樣做,每次訪問時,包括瀏覽器後退按鈕,代碼最終都會從服務器中重新獲取集合。 – Karthik
您可能可以在您的init代碼中實例化列表,並將其傳遞給您的路由器,而不是將獲取與路由綁定。請注意,推薦的方法是在頁面中使用序列化的JSON引導您的應用程序。 http://documentcloud.github.com/backbone/#FAQ-bootstrap – nikoshr