2014-12-11 2 views
0

У меня есть вид на панели, у которого есть подвидки, и каждый из них может оставаться «активным» (только click или contextmenu). И мне нужно получить ссылку на просмотр этого активного под-представления из родительского представления. Каков правильный способ сделать это?Как получить активный вид магистрали правильно?

Моя точка зрения иерархия выглядит следующим образом:

var OuterView = Backbone.View.extend({ 
    initialize: function() { 
     this.children = {}; 
     this.child = new Backbone.View(); 
     this.children[this.child.cid] = this.child; 
    }, 

    render: function() { 
     this.$el.html('<div data-view-cid="' + this.child.cid + '"></div>'); 
     _.each(this.children, function(view, cid) { 
      this.$('[data-view-cid="' + cid + '"]').replaceWith(view.el); 
     }, this); 
    } 
}; 
+0

Можете ли вы предоставить некоторый исходный код для этой проблемы? –

+0

Я обновил сообщение – Erik

+0

Существует много способов сделать это, и ваш путь также может быть принят. –

ответ

4

Подход, который я предпочитаю, состоит не в том, чтобы иметь активные и неактивные виды, а только для того, чтобы отображать только активное представление и удалять их, когда это не нужно.

Другими словами, самый простой способ справиться с состоянием - сделать вещи без гражданства.

+0

Я немного не согласен с вами. Представим себе панель инструментов google docs. Когда пользователь добавляет новую строку таблицы (например), используя кнопку панели инструментов, и сам документ может иметь несколько таблиц, как мы можем узнать, какая таблица является текущей? – Erik

+0

Уверены, всегда есть места, где вы должны держать понятие активного. На мой взгляд, это намного облегчает жизнь, когда мы избегаем ее как можно больше. –

+0

Хорошо, но у меня есть веб-приложение, такое как Google Docs, и я ищу решение, как реализовать сохранение активного объекта. Не могли бы вы указать мне в правильном направлении? – Erik

0

Простейшее решение будет делегировать родительское представление для прослушивания «нажмите DIV» и в обратном вызове получить вид ребенка по $(event.currentTarget).closest('[data-view-cid]')

child view не должен знать родительское представление, чтобы избежать создания зомби, иначе вам, возможно, придется очистить ссылки.

Смежные вопросы