2014-04-25 2 views
5

ractive 템플릿을 렌더링 할 때 일부 원격 데이터를 가져 오는 것이 좋습니다. 요청의 비동기 특성으로 인해 데이터가 출력되지 않습니다. 어떻게해야합니까?비동기 데이터로드 중 Ractive.js

var ractive = new Ractive({ 
    debug: true, 
     el: 'container', 
     template: '#template', 
     data: 
     { 
      chapters:chapters, 
        load_text: function(path) 
        { 
         $.get(path, function(text) {        
          return text; 
          }); 
        }      
     } 
}); 

답변

12

두 가지 해결책이 떠오른다.

Ractive 객체를 만들고 요청한 다음 데이터가있을 때 ractive 객체에서 'set'을 호출하십시오.

또는 권장하지 않는 경우 요청이 동기화 될 수 있습니다. 당신이 그것을 전달하는 함수는 콜백이 첫 번째 함수의시 실행되는 다른 함수에 매개 변수로 전달 (함수이기 때문에

var ractive = new Ractive({ 
    debug: true, 
    el: 'container', 
    template: '#template', 
    data: { 
     chapters: chapters, 
     load_text: function(path) { 
      $.ajax({ 
       url: path, 
       success : function (text) { 
        return text; 
       }, 
       async : false 
      }); 
     } 
    } 
}); 
+0

이것은 실제 R 구성 요소의 데이터를 프로덕션 환경에서로드하는 방법입니다. 덕분에 –

1

$.get에 전화가 어떤 값을 반환하지 않습니다 이유는있다 차단없이).

실제 $.get 함수는 아무 것도 반환하지 않습니다. 콜백을 전달하는 이유는 실행이 끝나면 해당 콜백을 호출 할 수 있습니다 (결과로 $.get를 매개 변수로 사용할 수 있음). 또한 ractive.data.load_text()을 응용 프로그램의 어딘가에서 호출하지 않으면 load_text에 지정된 기능이 실행되지 않습니다.

게시자가 게시 한 코드가 Javascript (특히 Javascript의 비동기 작업)가 작동하는 방식에 대한 기본적인 이해 부족을 보여줍니다. 콜백에 대한 독서를하는 것이 좋습니다 (아래 리소스를 게시했습니다). 행운을 빕니다!

javascriptissexy.com/understand-javascript-callback-functions-and-use-them/ 또한

recurial.com/programming/understanding-callback-functions-in-javascript/

, 때를 콜백을 졸업 할 준비가되었습니다. 여기에 jQuery의 약속에 관한 기사가 있습니다. http://code.tutsplus.com/tutorials/wrangle-async-tasks-with-jquery-promises--net-24135

+0

! 나는 js를 이해하고 단순히 그것을 우습게 작동시키는 방법을 찾고있었습니다. –