2012-03-23 16 views
5

क्या मैं अपना टेम्पलेट अलग .html फ़ाइलों पर रख सकता हूं और बस उन्हें अपने index.html में संदर्भित कर सकता हूं?underscore.js और backbone.js के लिए बाहरी HTML टेम्पलेट

index.html:

<script type="text/template" id="item-list" src="item-list-tmpl.html"></script> 

मद-सूची-tmpl.html:

<div><%= ItemDescription %><%= ItemCode %></div> 

मैं इसे करने की कोशिश की लेकिन समस्या यह index.html लेकिन उस पर टेम्पलेट प्रदर्शित नहीं करता है उचित मौके पर ही भार

अद्यतन

एक संभव समाधान मिला (फ़ायरबग का उपयोग कर इसे देखी), लेकिन है उत्पादन पर्यावरण के लिए अनुशंसित नहीं है।

+0

ऐसा लगता है कि इसके लिए कोई आसान समाधान नहीं है। [Requ.js] (http://requirejs.org/) आम तौर पर [समाधान के रूप में दिखाई देने वाला] दृष्टिकोण (http://backbonetutorials.com/organizing-backbone-using-modules/), मैंने कभी कोशिश नहीं की, लेकिन यह मुझे बहुत अधिक इंजीनियरिंग की तरह दिखता है। मुझे उम्मीद है कि कोई आसान और सीधा समाधान के साथ आता है। – fguillen

+0

यदि आपके पास कोई समाधान है, यहां तक ​​कि अपने स्वयं के प्रश्न के लिए, मुझे लगता है कि एक स्वतंत्र उत्तर बनाना बेहतर है, इसलिए लोग इसे टिप्पणी कर सकते हैं और इसे वोट दे सकते हैं। और आप इसे सही उत्तर के रूप में भी चुन सकते हैं। – fguillen

उत्तर

7

से http://coenraets.org/blog/2012/01/backbone-js-lessons-learned-and-improved-sample-app/#comment-35324

इस समझे इस के लिए एक अलग js फ़ाइल बनाएँ और अपने js से पहले ही फोन मॉडल, संग्रह और विचारों के लिए फ़ाइलें।

tpl = { 

// Hash of preloaded templates for the app 
templates:{}, 

// Recursively pre-load all the templates for the app. 
// This implementation should be changed in a production environment. All the template files should be 
// concatenated in a single file. 
loadTemplates:function (names, callback) { 

    var that = this; 

    var loadTemplate = function (index) { 
     var name = names[index]; 
     //console.log('Loading template: ' + name); 
     $.get('templates/' + name + '.html', function (data) { 
      that.templates[name] = data; 
      index++; 
      if (index < names.length) { 
       loadTemplate(index); 
      } else { 
       callback(); 
      } 
     }); 
    } 

    loadTemplate(0); 
}, 

// Get template by name from hash of preloaded templates 
get:function (name) { 
    return this.templates[name]; 
} 

}; 

कि आपके राउटर

tpl.loadTemplates(['filename-of-your-external-html-file'], function() { 
app = new AppRouter(); 
Backbone.history.start(); 
}); 

कि यह क्या करना चाहिए करने के लिए इस जोड़े जाने के बाद। लेकिन उत्पादन वातावरण के लिए फिर से अनुशंसित नहीं है क्योंकि अनुरोध प्राप्त करने के लिए सैकड़ों होंगे और आपके आवेदन को अपंग कर सकते हैं।

+0

क्या मैं सभी को लोड करने के बजाय उत्पादन वातावरण में आवश्यक टेम्पलेट लोड कर सकता हूं? –

1

मैं इस के लिए एक समाधान लिखा था, jQuery और एक सरल TemplateCache वस्तु का उपयोग कर:

http://lostechies.com/derickbailey/2012/02/09/asynchronously-load-html-templates-for-backbone-views/

और मैं हाल ही में टेम्पलेट लोड हो रहा है एक jQuery प्लगइन TrafficCop कहा जाता है का उपयोग करने के लिए अद्यतन: http://lostechies.com/derickbailey/2012/03/20/trafficcop-a-jquery-plugin-to-limit-ajax-requests-for-a-resource/

आशा है कि मदद करता है.

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