uncaught typeerror对象没有'on'方法:backbone.js

时间:2013-09-30 11:37:12

标签: javascript jquery backbone.js

我是Backbone的新手。我已经开始使用Backbone开发一个Web应用程序,但是,这个错误使我摆脱了困境。任何帮助,将不胜感激。

这是我的模型类和集合:

    var tasks = Backbone.Model.extend({ 
    default: function() {
    return {
        task : ''
       }}
    });

    var taskslist = Backbone.Collection.extend({ 
        model: tasks
    });

    var alltasks = new taskslist();

这是View Class:

    var taskview = Backbone.View.extend({ 
        model: new tasks(),
        tagName: 'div',
        initialize : function() { 
        this.template = _.template($('#temp').html());
    },
    render : function () {
        this.$el.html(this.template(this.model.toJSON()));  
        return this;
    }
    });



    var alltasksview = Backbone.View.extend ({ 
        model : 'tasks',
        el : $('#box1'),

    initialize : function() {
        this.model.on('add', this.render, this);
    },
    render: function () {
        var self = this;
        self.$el.html('');
        _.each(this.model.toArray(), function(tasks, i) {
            self.$el.append(new tasksview({ model:tasks }).render().$el);
            });
        }
    });

在jQuery文档就绪函数中,我按这样的方式点击一个按钮,在点击时添加该模型的项目:

$(document).ready(function() { 

$("#but1").click(function(e) { 

    var task1 =  new tasks({ task : $('#text1').val() });
    alltasks.add(task1);
    console.log(alltasks.toJSON()); 
 });
 });

这段代码抛出了主题错误。另外,My Backbone版本是1.0.0。

谢谢。

2 个答案:

答案 0 :(得分:0)

正如您在Catalog of Events 中看到的那样add事件存在且应该在您的模型上触发。

问题可能出在模型中,在上面的代码中,看起来你的模型只不过是一个字符串:

....
    model : 'tasks',
    el : $('#box1'),
...

可能没有add个事件。尝试正确初始化this.model,它将按预期工作。

这是我在另一个SO question中找到的小提琴:http://jsfiddle.net/ambiguous/Das2t/

答案 1 :(得分:0)

我有同样的问题,我刚才修好了。 问题是Backbone需要jQuery 1.7或更高版本,我将jQuery版本1.10替换为1.4.3,此错误已不再发生。 如果这不起作用,请尝试使用bind方法。