BackboneJS中的this.currentView未定义

时间:2014-09-25 04:07:56

标签: javascript backbone.js

我在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()时,结果未定义。

知道可能导致这种情况的原因是什么?

1 个答案:

答案 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。