1

私の現在のプロジェクトでは、ROR、バックボーン、アンダースコア JS、および JQuery を使用しています。ビューの1つで、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'
        }
    }

この関数を作成した理由は、URL からパラメーターを取得するためにさまざまな JST テンプレートをロードするためです。しかし、この方法は私にはうまくいきません。次のエラーが表示されます

ReferenceError: changeBoard is not defined
[Break On This Error]   

template : changeBoard,

URLパラメータを取得して動的JSTテンプレートをロードする方法を知っている人はいますか

ありがとう

4

2 に答える 2

1

このサンプルを確認してください: template: null,

    events: {
    },
    initialize: function () {
        if (changeTemplate) {
            this.template = "#PublicationGroupStatTemplate";
            changeTemplate = false;
        } else {
            this.template = "#PublicationGroupReportTemplate";
        }

ただし、関数内の if ステートメントでも同じことができます.. this.changeboard. コードは次のようになります: initialize: this.changeboard. それが役に立てば幸い。そして遅すぎるな!!

于 2013-01-22T10:12:28.797 に答える
0

Ruby と Javascript の間にいくつかの構文の問題があります。

template: changeBoard,

上記は、changeBoard という名前の変数を指しています。ビューの後半で、changeBoard という関数を定義します。これは、関数が functionName() を介して呼び出される Javascript と同じではありません。Ruby にはオプションの括弧があり、Javascript には関数を呼び出すときに括弧が必要なので、この混同は理解できます。

また:

if(boardSize === 4){
  'analysis/board44'
}else{
  'analysis/board'
}

return キーワードが指定されていないため、上記の関数は undefined を返します。繰り返しますが、これは 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と幸運:)

于 2013-01-22T11:05:20.987 に答える