3

バックボーン アプリケーションをセットアップしようとしています。以下のこのコードは、次のエラーを引き起こします。

キャッチされていない TypeError: オブジェクト # にはメソッド 'append' がありません

define(
    [
        'jQuery',
        'Underscore',
        'Backbone',
        'text!templates/start.html'
    ],

    function ($, _, Backbone, startTemplate)
    {
        var StartView = Backbone.View.extend({

            // properties
            el: $('#container'),

            initialize: function ()
            {
                this.render();
            },

            render: function ()
            {
                var template = _.template( startTemplate );
                this.el.append( template );
            }
        });

        return new StartView;
    }

);

しかし、これは機能します (「render」関数を参照してください):

define(
    [
        'jQuery',
        'Underscore',
        'Backbone',
        'text!templates/start.html'
    ],

    function ($, _, Backbone, startTemplate)
    {
        var StartView = Backbone.View.extend({

            // properties
            el: $('#container'),

            initialize: function ()
            {
                this.render();
            },

            render: function ()
            {
                var template = _.template( startTemplate );
                $(this.el).append( template );
            }
        });

        return new StartView;
    }

);

$('#container') を 'el' プロパティとして渡しているので、これで問題なく動作するはずです。この例で jQuery 表記を再度使用する必要があるのはなぜですか。$(this.el) の代わりに this.el

よろしくお願いします!

4

1 に答える 1

13

Backbone では、ID またはクラス名をel次のように指定するだけです。

el: '#container'

次に、this.elDOM 要素を参照し、(最新の Backbone を使用している場合) this.$eljQuery オブジェクトを参照します。

バックボーンが最新の場合、 $(this.el) は必要ありません

于 2012-06-26T13:51:21.670 に答える