Я занимаюсь интернационализацией приложения, которое я построил. В принципе, на клике флага инициируется событие, и функция обратного вызова будет извлекать json-файл, содержащий переведенные метки приложения. Затем я установил данные json в модель. Это просто отлично работает. Наконец, я скомпилирую шаблон с моделью, и я ее визуализирую. Но я просто получаю пустую страницу, никаких ошибок в консоли, просто пустую страницу. Я console.log модель и строка, возвращаемая template(), и они НЕ соответствуют.шаблон подчеркивания НЕ скомпилирует модель, которую я передаю в аргументе
здесь упрощенный образец (приложение построен на французском *):
var app_multi_lang_model = Backbone.Model.extend({
MODE_AVANCE : "mode: AVANCE",
MODE_OPERATEUR: "mode : OPERATEUR",
MENU: "Menu",
LANGUE: "langue",
FRANCAIS: "Français",
ANGLAIS: "Anglais",
CHINOIS:"Chinois",
ANNULER: "annuler",
VALIDER: "valider"
});
var app_view= Backbone.View.extend({
el:"#app_template_placeholder" ,
template: _.template($('#app_template').html()),
events:{
"click #us_flag":"us_flag_clicked"
},
us_flag_clicked: function(){
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (xhttp.readyState == 4 && xhttp.status == 200) {
app_multi_lang_model_instance.set(JSON.parse(xhttp.responseText));
app_view_instance.render();
}
};
xhttp.open("GET", "../languages/english.js", true); //loading the json file
xhttp.send();
},
render: function(){
console.log(this.model);
this.$el.html(this.template(this.model));
console.log(this.template(this.model));
}
});
var app_multi_lang_model_instance= new app_multi_lang_model();
var app_view_instance= new app_view({model:app_multi_lang_model_instance});
и это, как выглядит english.js как:
{
"MODE_AVANCE": "mode: AVANCED",
"MODE_OPERATEUR": "mode : OPERATOR",
"MENU": "Menu",
"LANGUE": "language",
"FRANCAIS": "French",
"ANGLAIS": "English",
"CHINOIS":"Chinese",
"ANNULER": "cancel"
}
and here are the screen of this.model just before .template(this.model) call:
and here a sample of the string that .template() returns
мы видим, что атрибуты модели теперь переведены на английском языке, но html, который должен быть представлен еще на французском языке. что я делаю неправильно? почему шаблон() все еще возвращает шаблон с прежней моделью, тогда как я передал ему обновленный. И почему браузер не отображает строку, возвращаемую template()?
С 'var self = this;' перед функцией onreadystatechange и 'self.render();' вместо 'app_view_instance.render()', это лучше? – bugyt
и замените 'console.log (this.model);' на 'console.log (JSON.stringify (this.model));' иметь реальное значение во время вызова. – bugyt
К сожалению, ничего не изменилось –