2012-07-19 3 views
0

나는 서버에서 모델 fetch()을 얻었으므로 결과를 fetch()보기로 렌더링하려고합니다.보기에서 모델 가져 오기 결과를 삽입하는 방법

fetch()의 결과는 객체 배열 (var risultati)이며 렌더링하려면 var risultati이 필요합니다. 나는 시도했지만 아무것도 작동하지 않습니다.

var AppRouter = Backbone.Router.extend({ 
    routes: { 
     "": "list", 
    }, 
    initialize: function() {}, 
    list: function() { 
     var utente = new Person(); 
     var risultati; 
     utente.fetch({ 
      success: function (data) { 
       var ris = data.attributes; 
       var risultati = ris.results; 
       console.log(risultati); /* risultati contains array of object to render*/ 
      } 
     }); 
     this.page = new UserListView({ 
      model: this.utente 
     }); 
     $('body').append(this.page.$el); 
    } 
}); 

답변

1

utente.fetch() 전화와는 별도로보기 렌더링을위한 호출이 발생했기 때문에 문제가 발생할 수 있습니다.

.fetch()은 비동기식이므로보기 코드는 .fetch()이 완료되기 전에 실행됩니다. success 함수의 일부로 뷰 생성/렌더링을 추가하거나 뷰 생성이 포함 된 새 함수를 실행하기 위해 모델이 업데이트 될 때 발생하는 변경 이벤트를 바인딩해야합니다.

+1

이상,'UserListView'는 모델의''change "'이벤트에 바인드해야하고'render'는 빈 모델이나 채워진 모델을 처리 할만큼 똑똑해야합니다. –

0

당신은 MVC 로직을 분리해야합니다 ... 내가 생각하는 컬렉션 (라우터 컬렉션)에 라우터 오브젝트를 연결하지 마십시오.
당신이 사람 모델의 컬렉션을 렌더링하기 위해 노력하고 있다고 가정하면, 나는 당신이 사람과 수집 및 "오브젝트의 배열을"처리하기위한 뷰의 모델과 뷰를 사용하는 것이 좋습니다 :

var Person = Backbone.Model.extend({ 
     initialize : function(){ 
      // initialize the view 
      this.view = new PersonView({model : this}); 
     } 
    }), 
    PersonView = Backbonke.View.extend({ 
     render : function(){ 
      // render your person 
     } 
    }), 
    UserList = Backbone.Collection.extend({ 
     model : Person, 
     initialize : function(){ 
      this.view = new UserListView({ 
        collection : this 
      }); 
     }, 
     update : function(){ 
      var self = this; 
      this.fetch({ 
       success: function (data) { 
        var ris = data.attributes; 
        var risultati = ris.results; 
        console.log(risultati); /* risultati contains array of object to render*/    self.view.render(); 
       } 
      }); 
     } 
    }), 
    UserListView = Backbone.View.extend({ 
     render : function(){ 
      this.collection.each(function(el,i){ 
       el.view.render(); 
      }); 
     } 
    }); 

다음 다음과 같이 사용하십시오 :

var page = new UserList(); 
var AppRouter = Backbone.Router.extend({ 
    routes: { 
     "": "list", 
    }, 
    initialize: function() {}, 
    list: function() { 
     page.update(); 
    } 
}); 

희망이 있습니다.

관련 문제