события коллекции магистрали не запускаются. Я что-то пропустил? - PullRequest
2 голосов
/ 28 ноября 2011

Я пытаюсь сделать предварительный загрузчик и попадаюсь на первом этапе с магистралью. Я создал хороший пример перед использованием 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)
    {

    }
});

Ответы [ 2 ]

6 голосов
/ 28 ноября 2011

вы используете неправильный способ привязки к вашим событиям :) с хэшем события вы объявляете все события, которые jquery необходимо связать с элементами в DOM, на ваш взгляд.

в модели, иликоллекция, которую вы привязываете к событиям сброса / изменения / ошибки, подобным этому:

var myModel = Backbone.Model.extend({});

var myCollection = Backbone.Collection.extend({
    model: myModel,
    initialize: function() {
        this.bind('reset', this.parse, this)
    },
    parse: function() {
        alert('parsing');
    }
});

var c = new myCollection({});
c.reset([{name: 'name1'}, {name: 'name2'}]);

см. дополнительную информацию о привязке событий здесь: http://documentcloud.github.com/backbone/#Events-bind

см. дополнительную информацию о DelegateEvents, которые вы пытались использовать,но предназначены только для использования в представлении для привязки событий элемента DOM: http://documentcloud.github.com/backbone/#View-delegateEvents

см. jsfiddle для рабочей версии: http://jsfiddle.net/saelfaer/kt2KJ/1/

0 голосов
/ 28 ноября 2011

Событие для прослушивания после извлечения сбрасывается.Так что для actin на этом вам нужно будет написать: events: { "reset":"parse" }

Документация для fetch может быть найдена на странице магистрали: http://documentcloud.github.com/backbone/#Collection-fetch

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...