0

目前我正在对 Backbone.js 进行一些研究,我想知道为什么$el在创建我的listItemView.

    // autoCompleteView.js

    /**
     * Create a new instance of {listItem} and
     * append it to result list.
     *
     * @param item
     * @see listItem
     * @private
     */
    _addResultListItem: function (item) {

        this.$el.append(
            new this.listItem({
                model: item,
                parent: this
            }).render().$el
        );

    }

更新:

渲染方法

    // autoCompleteView.js

    render: function () {

        // bind events
        this.input
            .keyup(this.keyup.bind(this))
            .keydown(this.keydown.bind(this))
            .after(this.$el);

        return this;
    }

项目视图

// autoCompleteItemView.js

var AutoCompleteItemView = Backbone.View.extend({

    tagName: "li",

    events: {
        "click": "select"
    },

    render: function () {
        this.$el.append( Mustache.to_html( Template, this.model.toJSON() ) );
        return this;
    },

    select: function () {
        this.options.parent.hide().select(this.model);
        return false;
    }

});

return AutoCompleteItemView;

console.log(new this.listItem({model: item, parent: this}).render());

日志输出

4

1 回答 1

4

el$el(jQuery Wrapped el) 是视图所代表的 DOM 元素。

渲染时,您将输出插入/附加到这些元素。

渲染的约定(在许多示例中使用)的常用view.$el.append(otherView.render().$el)结果返回视图本身以及在视图包含所需内容之前需要渲染视图的需求。

无需将其链接起来,您也可以将其分成两个语句otherView.render()view.$el.append(otherView.$el).

于 2013-05-17T11:27:00.647 回答