【问题标题】:Backbone - Object render has no method 'apply'Backbone - 对象渲染没有“应用”方法
【发布时间】:2012-04-15 07:18:15
【问题描述】:

我收到错误:

对象渲染没有适用于以下代码的方法。

可能是什么原因? 除了 javascript 的链接之外,html 页面不包含任何代码。
我应该怎么做才能消除错误?

(function($) {

    window.Book = Backbone.Model.extend({});

    window.Library = Backbone.Collection.extend({

        model: Book

    }); // end of Collection
    window.LibraryView = Backbone.View.extend({

        el: $('body'),

        events: {
            'click button#btn_add': 'btn_add'

        },

        initialize: function() {
            $(this.el).append("View initialized");
            _.bindAll(this, 'render', 'btn_add');
            this.collections = new Library();
            this.collections.bind('add', 'render', this);
            this.startingDisplay();

        },
        startingDisplay: function() {
            $(this.el).append("<input type='text' id='t1' /><button id='btn_add'>Add</button>");

        },

        btn_add: function() {

            book = new Book({
                title: "first"
            });
            alert("Name : " + book.get('title'));
            this.collections.add(book);
        },

        render: function() {
            alert("render called");

        },

    }); // end of LibraryView
    libraryview = new LibraryView();

})(jQuery);​

【问题讨论】:

    标签: jquery backbone.js apply nomethoderror


    【解决方案1】:

    您没有使用正确的语法来绑定add 集合事件。使用:

    // this.collections.bind('add', 'render', this);
    this.collections.bind('add', this.render, this);
    

    第二个参数应该是一个回调(一个函数)。

    DEMO

    【讨论】:

    • 为什么要在渲染函数中返回“this”?它有什么作用?
    • 所以它是可链接的,因此你可以做myView(someModel).render().el。在主视图中它可能不是那么有趣,但是当您有一个视图时它会变得很方便 - 比如说 - ContactItem。
    • 查看Todos annoted source 获取此机制的示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    • 1970-01-01
    • 2012-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多