1

我是 Backbone 的新手。我已经开始使用 Backbone 开发一个 Web 应用程序,但是,这个错误让我大吃一惊。任何帮助,将不胜感激。

这是我的模型类和集合:

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

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

    var alltasks = new taskslist();

这是视图类:

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

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

谢谢你。

4

2 回答 2

0

正如您在事件目录中看到的那样,该add事件存在并且应该在您的模型上触发。

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

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

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

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

于 2013-09-30T12:03:21.193 回答
0

我有同样的问题,我刚刚解决了它。问题是Backbone 需要jQuery 1.7 或更高版本,我将jQuery 版本1.10 替换为1.4.3,不再出现此错误。如果这不起作用,请尝试使用绑定方法。

于 2014-01-10T01:29:18.007 回答