Как клонировать представления в Backbone?

0

У меня есть представление, и мне нужно повторно отобразить его на той же странице.

Если я снова вызову .render() первый рендер исчезнет.

Клонирование объекта просмотра с помощью jQuery.extend() имеет тот же результат.

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

Я не могу вызвать new View() потому что существуют различные классы представления.

Как я могу сделать правильный клон представления?

  • 0
    Вы хотите сделать две страницы одним и тем же элементом DOM?
  • 0
    Я так не думаю, моя точка зрения просто сделать небольшой div . Если вы имеете в виду page под div тогда да, но не визуализируете в один и тот же элемент DOM.
Показать ещё 3 комментария
Теги:
backbone.js

2 ответа

1

Вы не можете просто клонировать свое представление и использовать его так, как хотите, потому что в фоновом режиме много работы, например:

  • генерация cid: уникальный идентификатор вашего представления в вашем приложении.
  • $el generation: основной элемент представления DOM
  • делегирование events: передача событий

Поэтому, если вы настаиваете на клонировании своего представления, я предлагаю вам создать клон этого var cloneView = $.extend(true, {}, view); которые делают то, что делает new View.

И поскольку mu is too short предлагается, событие $.extend не будет работать.

Таким образом, лучший способ сделать это - создать экземпляр new View

  • 2
    Я не думаю, что $.extend будет знать, что делать с el , событиями, содержащимися моделями / коллекциями и их событиями ...
  • 1
    @muistooshort ты прав, я просто пытаюсь убедить его создать новый взгляд.
0

Опасно идти слепо клонировать любую точку зрения. Вам нужно проверить тонкие вещи, такие как жестко закодированные идентификаторы в шаблоне и в представлении, стили шаблона при повторном использовании в разных местах и т.д.

Я бы предложил либо:

  1. Создайте новый экземпляр представления. (если вы уверены, что безопасно отображать другой экземпляр одновременно с предыдущим экземпляром представления на той же странице).

var my_view = new MyView({ el: $("#id") });

  1. Создайте новый вид, расширяющий этот вид. (это лучше)

CloneView = MyView.extend({//Stuff for CloneView }); var my_view = new CloneView({ el: $("#id") });

Ещё вопросы

Сообщество Overcoder
Наверх
Меню