如何在Backbone中克隆视图?

时间:2014-02-24 04:22:28

标签: javascript jquery backbone.js

我有一个视图,我需要在同一页面重新渲染它。

如果我再次呼叫.render(),则第一次渲染就会消失。

使用jQuery.extend()克隆视图对象的结果相同。

var cloneView = $.extend(true, {}, view);
$('#container').append(cloneView.render().el);

我无法调用new View()因为有各种视图类。

如何正确克隆视图?

2 个答案:

答案 0 :(得分:1)

你不能只是克隆视图并按照你想要的方式使用它,因为在后台完成了很多工作,例如:

  • cid代:您应用中视图的唯一ID。
  • $el代:视图主要DOM元素
  • events委托:视图事件委托

因此,如果您坚持克隆视图,我建议您创建一个var cloneView = $.extend(true, {}, view);的克隆,完全按照new View的要求进行操作。

正如mu is too short建议的那样,事件$.extend将不起作用。

所以最好的方法是实例化new View

答案 1 :(得分:0)

盲目克隆任何视图都很危险。您需要检查模板和视图中的硬编码ID等细微内容,模板在不同位置重复使用时的样式等等。

我建议:

  1. 创建视图的新实例。 (如果您确定在同一页面上同时使用上一个视图实例呈现另一个实例是安全的。)
  2. var my_view = new MyView({ el: $("#id") });

    1. 创建一个扩展该视图的新视图。 (这是一个更好的选择)
    2. CloneView = MyView.extend({ // Stuff for CloneView }); var my_view = new CloneView({ el: $("#id") });