Динамическая загрузка шаблона в Backbone JS
В моем текущем проекте я работаю с ROR, Backbone, Underscore JS и JQuery. В одном из представлений я установил шаблон JST следующим образом
ABC.Views.BoardView = Backbone.View.extend({
template : changeBoard,
// el: '#boardHolder',
events : {
'click .count' : 'showPlaced',
'click #newCard' : 'newCardForm',
'click #showCardsOverview' : 'showCardsOverview'
},
это продолжается...
Также у меня есть функция внизу страницы следующим образом
changeBoard: function(){
var params = window.location.search.replace( "?", "" );
var param= params.split("=");
var boardSize = param[1];
//return boardSize;
if(boardSize === 4){
'analysis/board44'
}else{
'analysis/board'
}
}
Почему я написал эту функцию, чтобы загрузить различные шаблоны JST для получения параметра из URL. Но этот способ не работает для меня. Это дает мне следующую ошибку
ReferenceError: changeBoard is not defined
[Break On This Error]
template : changeBoard,
Кто-нибудь знает, как загрузить динамический шаблон JST, получив параметры URL
Спасибо
2 ответа
Проверьте этот образец: template: null,
events: {
},
initialize: function () {
if (changeTemplate) {
this.template = "#PublicationGroupStatTemplate";
changeTemplate = false;
} else {
this.template = "#PublicationGroupReportTemplate";
}
Тем не менее, вы можете сделать то же самое в операторе if в функции.. this.changeboard. Код будет выглядеть примерно так: initialize: this.changeboard. Надеюсь, поможет. И еще не поздно!!
У вас есть некоторые проблемы с синтаксисом между Ruby и Javascript:
template: changeBoard,
Вышеуказанное указывает на переменную с именем changeBoard. Позже, по вашему мнению, вы определяете функцию с именем changeBoard. Это не то же самое, что в Javascript функция вызывается через functionName(). Я могу понять эту путаницу, поскольку у Ruby есть необязательные скобки, в то время как Javascript требует скобки при вызове функции.
Также:
if(boardSize === 4){
'analysis/board44'
}else{
'analysis/board'
}
Вышеприведенная функция вернет undefined, поскольку ключевое слово return не задано. Опять же, это Javascript, а не Ruby:)
То, что вы хотите, это:
changeBoard: function(){
var params = window.location.search.replace( "?", "" );
var param= params.split("=");
var boardSize = param[1];
//return boardSize;
if(boardSize === 4){
return 'analysis/board44';
} else {
return 'analysis/board';
}
}
Настройка динамического шаблона лучше всего сделать в функции инициализации вашего представления:
ABC.Views.BoardView = Backbone.View.extend({
initialise: function(){
this.template = this.changeBoard();
}
});
Если boardSize постоянно меняется, то шаблон должен быть установлен до рендера:
ABC.Views.BoardView = Backbone.View.extend({
render: function(){
this.template = this.changeBoard();
//render code continues here
}
});
HTH и удачи:)