我正在尝试在骨干网应用程序中使用 iScroll4。我有几个动态加载的列表,我想在加载适当的视图后初始化 iScroll。
当列表视图完成加载时,我正在尝试调用“新 iScroll”,但我一生都无法弄清楚如何做到这一点。
有没有人让这两个一起工作?是否有一个主干视图的示例在其元素加载后初始化滚动条?
我正在尝试在骨干网应用程序中使用 iScroll4。我有几个动态加载的列表,我想在加载适当的视图后初始化 iScroll。
当列表视图完成加载时,我正在尝试调用“新 iScroll”,但我一生都无法弄清楚如何做到这一点。
有没有人让这两个一起工作?是否有一个主干视图的示例在其元素加载后初始化滚动条?
你是对的,你必须先加载视图,或者之后再刷新iscroll
在我们的应用程序中,我们通常使用 render 方法来渲染视图,并有一个 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();
}