2011-08-19 15 views
6

ठीक है। मेरा एचटीएमएल नीचे जैसा दिखता है।हैंडलबार.जेएस मेरे टेम्पलेट को रीफ्रेश नहीं कर रहा है

<div id="json"></div> 

<div id="content-placeholder"> 
    <script id="some-template" type="text/x-handlebars-template"> 
    <table> 
     <thead> 
     <th>col 1</th> 
     <th>col 2</th> 
     </thead> 
     <tbody> 
     {{#results}} 
     <tr> 
      <td>{{col_1}}</td> 
      <td>{{col_2}}</td> 
     </tr> 
     {{/results}} 
     </tbody> 
    </table> 
    </script>      
</div> 

और मैं Handlebar.js के माध्यम से ऊपर पॉप्युलेट कर रहा हूँ और डेटा सर्वर से प्राप्त किया जाता है। कोड यहाँ है।

$.get(get_data_url, function(data) 
{ 
    $('#json').empty().append(data); 
    var rows = eval('(' + data + ')'); 

    var source = $("#some-template").html(); 
    var template = Handlebars.compile(source);         
    $("#content-placeholder").empty().append(template(rows)); 
}); 

जब कोड पहली बार चलता है, तो यह ठीक दिखता है। लेकिन जब मैं $ 2 को कॉल करता हूं। दूसरी बार (और आगे), टेम्पलेट को नए डेटा से रीफ्रेश नहीं किया जाता है।

मैं यह सुनिश्चित करने के लिए पूरी डेटा स्ट्रिंग भी प्रिंट करता हूं कि सर्वर से डेटा रीफ्रेश किया जा रहा है और यह है।

जब मैं अपने क्रोम पर जांच करता हूं, तो यह मुझे बताता है "अनकॉट टाइप एरर: विधि को कॉल नहीं कर सकता" शून्य "।

क्या यह "संकलन" के साथ कुछ करना है?

उत्तर

5

पहली बार जब आप ऐसा करते हैं:

$("#content-placeholder").empty()... 

आपका <div> इस में बदल जाता है:

<div id="content-placeholder"> 
</div> 

और अपने टेम्पलेट चला गया है। अपना टेम्पलेट ले जाएं:

<script id="some-template" type="text/x-handlebars-template"> 
    ... 
</script> 

#content-placeholder के बाहर कहीं बाहर।

+0

ओह आदमी। मैं एक उपकरण हूँ आपकी सहायता के लिए धन्यवाद. :) – ericbae

+3

या आप इस ब्लॉक को स्थानांतरित कर सकते हैं: 'var source = $ (" # कुछ-टेम्पलेट ")। Html();' 'var टेम्पलेट = हैंडलबर्स.com फ़ाइल (स्रोत);' '$ के बाहर। प्राप्त करें() 'कॉलबैक, ताकि आप टेम्पलेट लाएं और इसे एक बार संकलित करें, संसाधन/गति को बचाएं। –

+0

@ गार्सियावेबडेव: हाँ, यह एक अच्छा मुद्दा है। मैं आमतौर पर इसे एक साधारण टेम्पलेट प्रबंधक के अंदर दफन करता हूं जो पहले उपयोग पर संकलन और कैशिंग के साथ संबंधित है। हालांकि, मुझे अभी भी लगता है कि टेम्पलेट्स और सामग्री को मिश्रण न करना एक अच्छा विचार है। –

संबंधित मुद्दे