问题
I'm trying to build a mobile application with phonegap, backbone.js and coffeescript. I want to do something like this :
class MyApplication.Views.EntriesIndex extends Backbone.View
template: load('my/template') //It will load the external file my/template.tpl
render: ->
$(@el).html(@template())
this
I want to load it synchronously. I already seen require.js but I find it's too complicated for this simple think. I seen than I can use JST for a rails application but I don't find how to use it without sprocket and my application must to work on the client side only.
What is the better way to load templates synchronously?
I think the better is to preload it.
My application will be hosted on the client side.
回答1:
i load my templates this way:
$.ajax({
url : 'my/template.tpl',
async : false,
success : function(tpl) {
//do something with the template
}
});
maybe it`s a solution that works also for you ..
回答2:
I did this :
class HomeView extends Backbone.View
template: ->
template = "views/home.html"
cache = window.templates[template]
return cache if cache
cache = $.ajax(
url: "views/home.html"
async: false).responseText
window.templates[template] = cache
return cache
render: ->
@$el.html(@template())
And, in my application's initalization :
window.templates = {}
So I can load template asynchronously and cache it. Obviously, I will do some refactoring and, may be, place it into a JQuery function.
Thanks for yours helps.
Edit
I change my code to do this :
class Loader
@files: {}
@load: (path) ->
return @files[path] ||= $.ajax(url: path, async: false).responseText
Now I can do this :
class HomeView extends Backbone.View
template: ->
Loader.load("views/home.html")
render: ->
@$el.html(@template())
This is the javascript's version :
var Loader;
Loader = (function() {
function Loader() {}
Loader.files = {};
Loader.load = function(path) {
var _base;
return (_base = this.files)[path] || (_base[path] = $.ajax({
url: path,
async: false
}).responseText);
};
return Loader;
})();
I will probably publish the code on github...
回答3:
If your application runs as a phonegap app, you might as well include your templates in the HTML:
Explanation of <script type = "text/template"> ... </script>
来源:https://stackoverflow.com/questions/12807088/how-to-load-external-template-synchronously-with-backbone