ich von Require.js über diese geladen Template-Datei haben:Handlebars.js vermisst JSON-Daten
Haupt app.js
define([
'backboneLoader',
'handlebars',
'text!templates/main.html',
'text!appdata.json'
],
function(
Backbone,
Handlebars,
MainTemplate,
AppData
) {
"use strict";
return Backbone.View.extend({
initialize : function() {
this.render();
},
render : function() {
var template = Handlebars.compile(MainTemplate);
var output = template(AppData);
this.$el.append(output);
console.log("appData:\n" + AppData);
console.log("MainTemplate:\n" + MainTemplate);
console.log("Output:\n" + output);
//smth extra
return this;
}
});
}
);
MainTemplate (main.html)
<ul>
<li><b>Version:</b> {{version}}</li>
<li><b>Author:</b> {{author}}</li>
</ul>
AppData (appdata.json)
{version: "0.0.1", author: "John Doe"}
und Ausgang:
<ul>
<li><b>Version:</b></li>
<li><b>Author:</b></li>
</ul>
Während erwartete Ausgabe:
<ul>
<li><b>Version:</b> 0.0.1</li>
<li><b>Author:</b> John Doe</li>
</ul>
Irgendwelche Ideen, was mache ich falsch? Vielen Dank!
UPD: Problem gelöst. Hier wird aktualisiert Haupt app.js:
define([
'backboneLoader',
'handlebars',
'text!templates/main.html!strip',
'text!appdata.json'
],
function(
Backbone,
Handlebars,
mainTemplate,
appData
) {
"use strict";
return Backbone.View.extend({
initialize : function() {
this.render();
},
render : function() {
var template = Handlebars.compile(mainTemplate);
var output = template(eval("(" + appData + ")")); //Object is expected by template(), not JSON.
this.$el.append(output);
console.log("appData:\n" + appData);
console.log("template:\n" + mainTemplate);
console.log("Output:\n" + output);
//smth extra
return this;
}
});
}
);
Problem gelöst. Ich habe gerade ersetzt: var output = template (AppData); mit: var output = Vorlage (eval ("(" + appData + ")")); –
Bitte 'eval' nicht benutzen! Dies ist eine schlechte Vorgehensweise und stellt eine Sicherheitslücke dar, denn wenn ein beliebiges JavaScript im Text enthalten ist, wird es ausgewertet. Besser ist es 'JSON.parse (appData)' zu verwenden. Möglicherweise müssen Sie 'json2.js' hinzufügen, um JSON-Unterstützung für ältere Browser (<= IE7) hinzuzufügen: https://github.com/douglascrockford/JSON-js/ – frontendbeauty