2012-03-12 5 views
2

backbone.js 응용 프로그램에서 iScroll4를 사용하려고합니다. 동적으로로드 된 목록이 여러 개 있으며 적절한보기가로드 된 후 iScroll을 초기화하려고합니다.백본보기로 재생할 iscroll4를 가져올 수 없습니다.

목록 뷰가로드가 완료되면 '새 iScroll'을 호출하려고하는데, 실제로이 작업을 수행하는 방법을 알 수 없습니다.

누구도 함께 작업 할 수 있습니까? 일단 요소가로드되면 스크롤러를 초기화하는 백본보기의 예제가 있습니까?

+0

아래로 비등? 실수가 아니라면 iScroll이 부모 요소에 연결되어 추가 된 모든 데이터가 스크롤됩니다. – Jlange

+0

그럴 때 목록이 약간 움직이지만 스크롤하지는 않는 이상한 "고무 밴드"효과를 얻습니다. 라이브러리가 요소의 높이를 알고 있으므로 먼저로드해야한다고 생각합니다. 그 중 하나, 또는보기에서 iScroll을 제대로 초기화하지 않았습니다. 나는 그것을하는 방법에 대한 온라인 예제를 찾을 수 없었다. – user1265102

+0

나는 본다. iScroll 문서를 읽은 후 초기화시 너비와 높이를 모두 설정해야하는 것처럼 보입니다. 당신이 저에게 묻는다면 그 종류가 전체 플러그인을 덜 유용하게 만듭니다. Sander의 솔루션이 유일한 방법 인 것처럼 보입니다 (보기가로드 될 때 콜백을 설정 한 다음 iScroll을 초기화하는 방법). – Jlange

답변

7

당신이, 당신이 먼저 을보기를로드하거나 defenately 우리의 응용 프로그램에서 나중에

을 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 
     }); 
    } 

}); 

호출의 이러한 방법 우리는 우리의보기 외부 이것은 우리는 몇 가지보기 관리자가이 을 처리하고자 않았다으로하지만 내용이로드되기 전에 당신이보기에 iScroll을 초기화 할 수 없습니다이

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(); 
    } 
+0

내 응용 프로그램에 iscroll을로드 할 수 없습니다. 나는 백본을 사용하고 있으며 밑줄을 긋고 js를 요구합니다. 나는이 코드를 가지고있다. var scroller = 새로운 iScroll ('itemcontainer'); 그것은 iScroll이 생성자가 아니라고 말합니다. 어떤 아이디어? – jongbanaag

관련 문제