Backbone rerender vs jquery remove

时间:2016-03-16 15:33:47

标签: javascript jquery html dom backbone.js

我正在阅读骨干教程,并了解以下代码文件,其中导师从model删除了一个collection并更新了用户界面

var PersonsView = Backbone.View.extend({
    initialize: function(){
        this.model.on('add', this.addPerson, this);
        this.model.on('remove', this.removePerson, this);
    },
    addPerson: function(person) {
        var personView = new PersonView({model: person});
        this.$el.append(personView.render().$el);
    },
    removePerson: function(person){
        this.$('li#' + person.id).remove();
    },
    render: function() {
        var self = this;
        self.model.each(function(record) {
            var personView = new PersonView({model: record});
            self.$el.append(personView.render().$el);
        });
    }
});

在功能

removePerson: function(person){
    this.$('li#' + person.id).remove();
},

他正在DOM中搜索songId并使用jQuery从UI中删除它。

我的问题是什么是更快的方法来完成这项任务?

this.$('li#' + person.id).remove();

将整个DOM树解析为搜索元素并将其删除 或

this.$el.html('');
this.render();

删除整个视图并重新渲染

顺便说一下,我对骨干来说是全新的,所以请轻松一下

1 个答案:

答案 0 :(得分:1)

来自backbone website

  

如果页面中包含jQuery,则每个视图都有一个$函数,该函数在视图元素中运行作用域的查询...它等同于运行:view。$ el.find(selector)

所以 - this.$(...) - 选择器只解析视图的元素,而不是整个DOM。我会坚持第一种方式。

相关问题