2013-07-23 2 views
0

에 전달하면 뷰 변수에 questions 변수를 전달할 수 있습니까?데이터를 렌더링 Backbone.js

Ive는 가져 오기에서 this.render를 호출하려고 시도했으나 오류가 발생했습니다. 아마도이 때문일 수 있습니다. 올바른 범위에 있지 않습니다.

app.AppView = Backbone.View.extend({ 
    initialize: function(){ 


     var inputs = new app.Form(); 

     inputs.fetch({ 

      success: function() { 

       var questions = inputs.get(0).toJSON().Questions; 

       app.validate = new Validate(questions); 
       app.validate.questions(); 



      }, // End Success() 

      error: function(err){ 
       console.log("Couldn't GET the service " + err); 
      } 

     }); // End Input.fetch() 

     this.render(); 

    }, // End Initialize 

    render: function(){ 
     el: $('#finder') 
     var template = _.template($("#form_template").html(), {}); 
     this.$el.html(template); 

    } 

답변

1

성공 콜백은보기 인스턴스와 다른 객체라고합니다.

var self = this; 

그리고 다음 성공 콜백 내부 :

self.render(); 
1

나는 확실히 아니에요 당신이 inputs.fetch를 호출하기 전에 를 해결하는 가장 쉬운 방법은 이런 식으로 뭔가를 추가하는 것입니다 달성하고자하는 것이 무엇인지 확신 할 수 있지만 문제가 성공 콜백에서 렌더링을 호출하는 경우 Function # bind 또는 self variable을 할당하는 두 가지 옵션이 있습니다.

"self"변수에 대한 자세한 내용은 var self = this?을 참조하십시오. 예 :

var self = this; 

inputs.fetch({ 
    success: function() { 
     self.render(); 
    }, 
    ... 
}); 

당신은 아마 예 "효과적인 자바 스크립트"를, 자바 스크립트 범위에 대한 몇 가지 독서을하거나 거기에 무슨 더 나은 아이디어를 얻을 온라인 (예를 this MDN article에 대한) 항목을 검색합니다.

함수 # bind()에 대해서는 the MDN article about it을 참조하십시오. Backbone을 사용하면 Underscore/LoDash의 _.bind 대신 Function # bind()가 지원되지 않는 곳에서도 작동하는지 확인하는 것이 좋습니다.

더 높은 수준의 개념은 가져 오기 작업이 모델 또는 라우터 수준에 속한 것처럼 보이며 대신 질문 변수를보기의 모델로 지정해야합니다. 이상적으로는 데이터 처리/가져 오기를 수행하지 않는 뷰는 필요한 데이터 변환을 수행하는 데 필요한 메소드가있는 모델 만 제공합니다.

뷰는 모델의 출처에 대해 걱정할 필요가 없습니다. 일반적으로 단일 페이지 응용 프로그램 또는 페이지의 일부 초기화 코드의 경우 라우터에서 처리합니다.

관련 문제