2012-09-06 4 views
0

그래서이 딜레마가 있습니다. 기본보기에 추가 될 하위보기를 만드는 백본보기가 있습니다. 이러한 각 하위 뷰는 하위 뷰를 완료하기 위해 데이터를 검색하는 ajax 호출을 작성해야합니다. 이제 수퍼 뷰는 각 하위 뷰 렌더링을 호출하고 a는 자체에 추가합니다. 그런 다음 주보기의 요소를 가져 와서 서버에 게시합니다. 문제는 아약스가 서버에 게시물을 보낸 후 완료된다는 것입니다. 비동기 호출로이 작업을 구조화하는 더 좋은 방법이 있습니까? 나는 동기식으로 작동하지만로드 바가 나타나지 않는다. 나는 심지어 전화에서 데이터를 다시 얻을 수 있고, 데이터가 이미 전송되기 때문에 아무것도 결합하지 못할 전에 함수가 완료 이제 생성백본 렌더링 및 아약스 호출로 처리하는 방법

WebView 
generate:function(){ 
    var html = new MainView().render().el 
    //ajax post to server with html 
} 

MainView 
    initalize: 
    render:function(){ 
     this.el.append(new Subview().render().el); 
    } 

Subview 
    initialize: 
    render:fucntion(){ 
     //ajax - with a success that alters the el 
     return this; 
    } 

: 그래서 여기

은 어떤지의 예입니다 서버.

답변

1
MainView 
childViews = []; 
renderCompletedChildViews = 0; 
addChildView: function() { 
    var subView = new SubView(); 
    this.childViews.push(subView); 
    subView.on("renderComplete", postToServer, this); 
} 
render: function() { 
    for(var i=0; i<this.childViews.length; i++) { 
     this.childViews[i].render(this.el); 
    } 
} 
postToServer: function() { 
    this.renderCompletedChildViews++; 
    if(this.renderCompletedChildViews == this.childViews.length) { 
     // Interact with server 
    } 
} 


SubView 
render: function (el) { 
    // Make an ajax call, on receiving data append the data to el passed by parent view and trigger "renderComplete" on current instance 
} 

이렇게하면 코드를 이벤트 구동 및 비동기로 완벽하게 만들 수 있습니다.

+0

웹보기에서 addchildview를 호출 한 다음 약간 혼동 스럽습니까? –

+0

예! mainview에 원하는만큼의 서브 뷰를 추가하고 render를 호출하십시오. WebView에서도 추가 할 수 있습니다. –

+0

고마워 이것이 완벽하게 작동했습니다. –

관련 문제