2014-04-25 93 views
5

我喜歡在渲染一個rative模板時引入一些遠程數據。由於請求的異步性質,沒有數據將其輸出。我怎樣才能做到這一點?異步數據加載到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: '' 
    } 
}); 

$.get(path, function(text) { 
    ractive.set('load_text', text); 
}); 

或者,這不被推薦,您可能會導致您的請求變爲同步。

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,並且只是在尋找一種使其與ractive合作的方式。 –