主干和车把渲染视图.$el.html
Backbone and Handlebars Rendering View with this.$el.html
我已经开始玩骨干和车把,下面的代码在this.$el.html(jsObject);
中断,并给出下一个错误:
Uncaught TypeError: Cannot read property 'html' of undefined tasks.js:26
(anonymous function) tasks.js:26
fire jquery.js:3119
self.fireWith jquery.js:3231
done jquery.js:9275
callback jquery.js:9685
有一个done函数允许fetch在JSON之前返回。Parse进来了。我使用JSON.stringify
和JSON.parse
作为车把想要一个JavaScript对象和我的api返回json(我相信有一个更好的方法)。console.log(jsObject);
给出了正确的车把生成的html,所以不确定为什么它停止,我确实想做一些像var context = template(jsonObject.toJSON());
的事情,因为这将与代码中的块数据一起工作。
JSON.stringify
和JSON.parse
,并使用toJSON(),并把完整的错误。使用Backbone 1.1.2和JQuery v1.11.1.
var serverUrl = 'http://test.local/';
var Event = Backbone.Model.extend({});
var EventCollection = Backbone.Collection.extend({
model: Event,
url: serverUrl + 'events'
});
var EventListView = Backbone.View.extend({
el: "#events",
initialize: function(){
this.render();
},
render: function () {
var events = new EventCollection;
var eventsFetch = events.fetch({
success : function(data){
events = ((data));
// console.log(events);
}
});
eventsFetch.done(function(){
var template = Handlebars.compile( $("#events-template").html() );
var rendered = template(events.toJSON());
console.log(rendered);
this.$el.html(rendered);
return this;
});
}
});
var EventListView = new EventListView();
HTML <body>
<div id="events"></div>
<script id="events-template" type="text/x-handlebars-template">
<table>
{{#each []}}
<tr>
<td>{{this.event_id}}</td>
<td>{{this.entity_id}}</td>
<td>{{this.event_title}}</td>
<td>{{this.event_desc}}</td>
<td>{{this.event_state}}</td>
<td>{{this.id}}</td>
</tr>
{{/each}}
</table>
</script>
<script type="text/javascript" src="js/tasks.js" /></script>
</body>
</html>
似乎您的this
引用在您的延迟解析时作用域不正确。试试这个:
var _this = this;
eventsFetch.done(function(){
var template = Handlebars.compile( $("#events-template").html() );
var rendered = template(events.toJSON());
console.log(rendered);
_this.$el.html(rendered);
return _this;
});
可以使用jQuery。代理保留作用域:
eventsFetch.done($.proxy(function(){ var template = Handlebars.compile( $("#events-template").html() ); var rendered = template(events.toJSON()); console.log(rendered); this.$el.html(rendered); return this; }, this));
相关文章:
- 更改el属性时未激发主干视图事件
- 骨干视图将样板指定给el
- tagName没有在子视图中启动新的el元素;它继承自父视图
- 未指定预定义 el 而不呈现的主干视图
- 骨干视图:el和事件
- 主干.js在调用渲染之前更改视图的 el 值
- 这个.remove()在主干视图上使EL消失
- 为什么视图不使用 .el 呈现
- 模板上添加了新$el,其中包含在主干视图中返回的 ajax 成功数据
- 动态呈现视图后,将事件绑定到视图的 el
- backbone.js-集合视图给出"TypeError:无法读取属性'el'未定义的“;错误
- 在视图的event属性中使用backbone.js侦听与@el相关的事件
- 将 this.el 与主干.js子视图混淆
- 在Backbone.js中根据条件向不同的el添加视图
- js视图-将事件绑定到"el"之外的元素
- 在主干视图中使用tagName, id和className属性是什么?而我们可以用el来访问dom元素
- BackboneJs:在视图中el:和tagName:有什么区别?
- 主干和车把渲染视图.$el.html
- 为什么主干视图.el是'body'一切都很好,但当view.el是'#容器'
- 主干js-动态加载视图:el应该是启动器,还是应该由父视图启动