define([
'jquery',
'underscore',
'backbone',
'text!modules/index/templates/container.html'
], function($, _, Backbone, container_temp){
var indexView = Backbone.View.extend({
el: $('.main_container'),
initialize:function(){
_.bindAll(this, 'render');
},
render:function(){
var $this = this;
var $el = this.el;
$.get('/js/index/render', {}, function(data){
var dat = JSON.parse(data);
$this.pars = dat;
var tpl = _.template(container_temp, dat);
$el.html(tpl);
});
}
});
return new indexView;
});
运行此代码应该用HTML填充$ el。但是,我的浏览器在$el.html(tpl);
搞砸了。
Uncaught TypeError: Object #<HTMLDivElement> has no method 'html'
要解决这个问题,我必须这样做:$($el).html(tpl);
以便jquery注册。
这看起来很尴尬。在我以前的项目中,我总是以前一种方式完成它,并且它始终有效。
答案 0 :(得分:3)
this.el
是一个原始DOM元素,但html
方法属于jQuery。
在渲染方法中尝试var $el = this.$el;
:
render:function(){
var $this = this;
var $el = this.$el;
$.get('/js/index/render', {}, function(data){
var dat = JSON.parse(data);
$this.pars = dat;
var tpl = _.template(container_temp, dat);
$el.html(tpl);
});
}
答案 1 :(得分:2)
如果你看一下你的渲染函数:
render:function(){
var $this = this;
var $el = this.el;
$.get('/js/index/render', {}, function(data){
var dat = JSON.parse(data);
$this.pars = dat;
var tpl = _.template(container_temp, dat);
$el.html(tpl);
});
}
你明确指定var $el
所以下面的$ el等于this.el,这是没有你通常用$ el获得的jQuery包装的原始dom元素。
试试这个:this.$el
没有var declaration
。
因此,要将$ el放入$ .get范围,代码将如下所示:
render:function(){
var $this = this;
var element = this.$el;
$.get('/js/index/render', {}, function(data){
var dat = JSON.parse(data);
$this.pars = dat;
var tpl = _.template(container_temp, dat);
element.html(tpl);
});
}