Я пытаюсь сделать предварительный загрузчик и попадаюсь на первом этапе с магистралью. Я создал хороший пример перед использованием jquery, а также с «сырыми» js. В основном получается, что у меня есть папка img / ui и серверный скрипт, который просто дает дамп JSON этой папки. Этот запрос / предварительно загружает js, затем ставит его в очередь и загружает их один за другим на основе процесса загрузки событий с таймаутами и обработчиками ошибок.
Я пытаюсь перенести это на Backbone. Шаблон, который я считал коллекцией, загружает в JSON набор моделей для каждого из ресурсов, а затем отдельное представление, присоединенное к коллекции, для отображения состояния очереди ...... просто.
Но я уже застрял ... во-первых, мне нужно вручную извлечь JSON, или он ничего не сделает ... хорошо ... сделано, во-вторых, даже когда JSON загружен, он не будет запускать метод синтаксического анализа (или любой другой):
var PreloaderCollection = Backbone.Collection.extend({
model:PreloaderModel,
url:"/preload",
events: {
"change":"parse"
},
initialize: function()
{
_.bindAll(this);
this.fetch(this.url);
},
setup: function(args)
{
},
update: function(args)
{
},
parse:function(args){
log(args)
},
remove: function(args)
{
}
});
Я действительно начинаю расстраиваться из-за Backbone. Это мой первый крупный проект, и, несмотря на то, что я читаю каждый учебник и полностью просматриваю исходный код, кажется, что существует большое противоречие с шаблоном и возможностями.
EDIT:
Это было последнее средство, и я чувствую себя очень грязно, но вот как я "обошел" эту проблему.
По сути, я переопределил функцию извлечения своей собственной функцией, которая теперь работает, но ... хм,
var PreloaderCollection = Backbone.Collection.extend({
url:"/preload",
events: {
"reset":"parse"
},
initialize: function()
{
log("initing preloader collection")
_.bindAll(this);
this.bind("change",this.parse)
this.fetch(this.url);
},
fetch:function(args){
$.getJSON(
args,
this.parse
)
},
setup: function(args)
{
},
update: function(args)
{
},
parse:function(args){
log("parse",args)
},
remove: function(args)
{
}
});