在我目前的项目中,我正在使用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'
}
}
为什么我写这个函数是为了从URL获取参数而加载不同的JST模板。但这种方式对我不起作用。它给我以下错误
ReferenceError: changeBoard is not defined
[Break On This Error]
template : changeBoard,
有没有人知道如何通过获取URL参数来加载动态JST模板
由于
答案 0 :(得分:1)
检查此示例: template:null,
events: {
},
initialize: function () {
if (changeTemplate) {
this.template = "#PublicationGroupStatTemplate";
changeTemplate = false;
} else {
this.template = "#PublicationGroupReportTemplate";
}
但是,您可以在函数.. this.changeboard中的if语句中执行相同操作。代码将类似于:initialize:this.changeboard。 希望能帮助到你。不要太晚!!
答案 1 :(得分:0)
Ruby和Javascript之间存在一些语法问题:
template: changeBoard,
以上指向名称为changeBoard的变量。稍后在您的视图中定义一个名为changeBoard的函数。这与通过functionName()调用函数的Javascript不同。我可以理解这种混淆,因为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,祝你好运:)