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;
    });