Динамическая загрузка шаблона в 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 и удачи:)

Другие вопросы по тегам