我在Backbone.js的主视图中渲染子视图为了杀死zoombie视图我创建了一个公共函数:
function showView(view) {
if (view){
view.remove();
}
this.currentView = view;
this.currentView.render();
$("#column").html(this.currentView.el);
}
我在此致电showView()
:
render : function(){
this.$el.html(mainTemplate);
var _subview= new SubView({el : '#column'});
showView(_subview);
}
子视图:
define(["jquery" ,
"underscore" ,
"backbone",
"text!templates/subviewTemplate.html"
],function($, _, Backbone, Subview){
var SubView= Backbone.View.extend({
initialize : function(){
},
render: function(){
var _subview= _.template(Subview);
this.$el.html(_subview());
return this;
}
});
return SubView;
});
问题:当我在当前视图或console.log(this.currentView)
中执行showView()
时,结果未定义。
知道可能导致这种情况的原因是什么?
答案 0 :(得分:0)
以下几点:首先,下划线的_.template函数,除非你传递模板和一些数据,否则返回另一个函数。现在看来你只是传递模板字符串。您需要另外将数据传递给插值:
var _subview = _.template(Subview, { key: value });
或者,如果没有要插入的数据,则需要调用该方法以返回标记字符串:
$(this.el).html(_subview());
我推荐的另一件事,如果你要将你的观点附加到现有元素,不要使用它。$ el。当你要求它附加的元素不在DOM中时,这个。$ el将是未定义的。您可以使用$(this.el)代替使用此简写,因为在元素存在于DOM之前,它不会尝试选择并将el缓存为jquery包装对象。另一种方法是允许你的div创建元素并将整个el附加到DOM中,在这种情况下你可以在你的渲染方法中使用这个。$ el。