Javascript 主干和把手渲染视图与此。$el.html
我已经开始玩主干和把手,下面的代码在Javascript 主干和把手渲染视图与此。$el.html,javascript,jquery,backbone.js,handlebars.js,Javascript,Jquery,Backbone.js,Handlebars.js,我已经开始玩主干和把手,下面的代码在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:96
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
,因为Handlebar需要一个JavaScript对象,我的api返回JSON(我相信有更好的方法)。console.log(jsObject)
提供了正确的手柄生成的html,因此不确定它为什么会停止,我确实想做一些类似于var context=template(jsonObject.toJSON())的事情代码>因为这将处理代码中的块数据
编辑:我已经清理了它以删除JSON.stringify
和JSON.parse
,并使用toJSON()将完整错误放入。使用主干网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
{{{#每个[]}
{{this.event_id}
{{this.entity_id}
{{this.event_title}}
{{this.event_desc}}
{{this.event_state}}
{{this.id}}
{{/每个}}
当延迟解析时,您的此
引用的范围似乎不正确。试试这个:
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.proxy保留范围:
eventsFetch.done($.proxy(function)(){
var template=handlebar.compile($(“#事件模板”).html();
var rendered=template(events.toJSON());
console.log(呈现);
此.$el.html(已呈现);
归还这个;
}这),代码>
还是不行。尝试了“#events”和“#events”以及el:“body”。您能否在创建视图之前提供DOM中的html?在创建视图时,您的元素可能不存在。主干版本1.1.2如果我使用$(this.el)。html我没有收到错误,但仍然不起作用,“this.$el”应该在1.1.2clintronx中起作用。我添加了html,Handlebar从DOM中获取模板并正确地呈现它console.log(呈现)代码>证明了这一点。谢谢clintronx让我开心!你认为我还能做些什么来改进这段代码。
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;
});