Невозможно заставить iscroll4 играть с видом магистрали - PullRequest
2 голосов
/ 13 марта 2012

Я пытаюсь использовать iScroll4 внутри приложения backbone.js.У меня есть несколько динамически загружаемых списков, и я хочу инициализировать iScroll после загрузки соответствующего представления.

Я пытаюсь вызвать «новый iScroll», когда представление списка завершает загрузку, но не могу на всю жизньвыяснить, как это сделать.

Кто-нибудь заставил этих двоих работать вместе?Есть ли какой-нибудь пример базового представления, инициализирующего скроллер после загрузки его элемента?

1 Ответ

7 голосов
/ 13 марта 2012

вы правы, вы должны сначала загрузить представление, или обязательно обновите iscroll потом

в наших приложениях мы обычно используем метод рендеринга для рендеринга вида и иметь метод postRender, который обрабатывает инициализацию этих дополнительных плагинов, таких как iscroll

конечно, вам нужна ручная работа, чтобы сделать это, но это суть этого:

var myView = Backbone.View.extend({

    // more functions go here, like initialize and stuff... but I left them out because only render & postRender are important for this topic

    // lets say we have a render method like this:
    render: function() {            
        var data = this.collection.toJSON();
        this.$el.html(Handlebars.templates['spotlightCarousel.tmpl'](data));
        return this;
    },

    // we added the postRender ourself:
    postRender: function() {            
        var noOfSlides = this.collection.size(); 
        $('#carouselscroller').width(noOfSlides * 320);

        this.scroller = new IScroll('carouselwrapper', {
            snap: true,
            momentum: false,
            hScrollbar: false
        });
    }

});

теперь вызов этих методов мы сделали это вне нашего представления, так как нам нравится какой-то менеджер представления, чтобы справиться с этим но это сводится к этому

    var col = new myCollection();
    var view = new myView({ collection: col });

    $('#wrapper').html(view.render().$el); // this chaining is only possible due to the render function returning the whole view again.

    // here we always test if the view has a postRender function... if so, we call it
    if (view.postRender) {
        view.postRender();
    }
...