Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 重新渲染视图-主干_Backbone.js - Fatal编程技术网

Backbone.js 重新渲染视图-主干

Backbone.js 重新渲染视图-主干,backbone.js,Backbone.js,我是主干网新手,我正在尝试重新渲染视图的内容。我已经在JSFIDLE中发布了代码 因此,当用户单击“重新渲染”时,如何删除dom中的内容并仅显示新项目?最安全的做法是跟踪AppView中的QuestionView实例。然后,在添加新问题视图之前,可以对每个问题视图调用remove;委员会: 用于从DOM中删除视图的便利函数。相当于调用$view.el.remove 视图应该提供自己的移除实现来解除与非DOM事件的绑定,从而防止僵尸。默认设置只是将视图的el从DOM中删除,但是如果从一开始就正确执

我是主干网新手,我正在尝试重新渲染视图的内容。我已经在JSFIDLE中发布了代码


因此,当用户单击“重新渲染”时,如何删除dom中的内容并仅显示新项目?

最安全的做法是跟踪AppView中的QuestionView实例。然后,在添加新问题视图之前,可以对每个问题视图调用remove;委员会:

用于从DOM中删除视图的便利函数。相当于调用$view.el.remove

视图应该提供自己的移除实现来解除与非DOM事件的绑定,从而防止僵尸。默认设置只是将视图的el从DOM中删除,但是如果从一开始就正确执行,那么当代码不可避免地发生更改时,一切都会正常工作

首先,调整QuestionView以使用remove方法删除绑定到模型的事件:

var QuestionView = Backbone.View.extend({
    //...
    remove: function() {
        this.model.off('change', this.render);
        this.$el.remove();
    }
});
然后,您需要对AppView进行一些调整,以跟踪您的问题视图:

演示:


我还更新了您的代码以使用and,而不是绑定和取消绑定以匹配新样式。较新版本的主干网也有一个缓存版本$this.el,因此我已经更新了使用该版本的代码。

最安全的做法是跟踪AppView中的QuestionView实例。然后,在添加新问题视图之前,可以对每个问题视图调用remove;委员会:

用于从DOM中删除视图的便利函数。相当于调用$view.el.remove

视图应该提供自己的移除实现来解除与非DOM事件的绑定,从而防止僵尸。默认设置只是将视图的el从DOM中删除,但是如果从一开始就正确执行,那么当代码不可避免地发生更改时,一切都会正常工作

首先,调整QuestionView以使用remove方法删除绑定到模型的事件:

var QuestionView = Backbone.View.extend({
    //...
    remove: function() {
        this.model.off('change', this.render);
        this.$el.remove();
    }
});
然后,您需要对AppView进行一些调整,以跟踪您的问题视图:

演示:


我还更新了您的代码以使用and,而不是绑定和取消绑定以匹配新样式。较新版本的主干网中还有一个缓存版本$this.el,因此我也更新了使用该版本的代码。

我添加了这个。$question-list.empty;另外,这是正确的方法吗?谢谢Matti.但是这是正确的方法吗?我不确定。我认为,就主干而言,很少有一种正确的方法。通过一个简单的列表,您可以在其中销毁所有以前的元素,我认为这是最简单的操作。对于包含子视图的更复杂的场景,我发现这篇博文很有帮助:我添加了这个。$question-list.empty;另外,这是正确的方法吗?谢谢Matti.但是这是正确的方法吗?我不确定。我认为,就主干而言,很少有一种正确的方法。通过一个简单的列表,您可以在其中销毁所有以前的元素,我认为这是最简单的操作。对于具有子视图的更复杂场景,我发现这篇博文很有帮助: