Чтобы помочь вам раскрывают полный потенциал кукольного, we’ ве подготовлен весь eBook 1 полный полезных практических примеров, которые также доступны в Smashing Library 2 .- Эд .
В этой серии на Backbone.Marionette, мы уже обсуждали Application
и Module
.На этот раз мы будем принимать глупца в как марионеток помогает сделать вид лучше в Backbone.Марионеток расширяет базу View
класс от Backbone, чтобы дать нам больше встроенной функциональности, чтобы устранить большую часть шаблонного кода и конвертировать все общего кода до конфигурации .
Я настоятельно рекомендую вам вернуться и прочитать статьи о Application __23 | 3 | __7 и Module __29 | 4 первых, если вы еще этого не сделали.Некоторые вещи могут быть упомянуты в этой статье, относятся к предыдущим статьям, и это является частью серии статей о марионеток, так что если вы хотите, чтобы узнать о марионеток, вы должны прочитать целый ряд .
Событие Binding
До недавнего просмотров Магистральные часто неправильно, в результате чего ужасный проблему, известную как проблема была вызвана мнением слушать событий на модели, которая сама по себе является полностью безвредным “видом зомби.”.Проблема в том, что, когда мнения были больше не нужны и были “отброшены”, они никогда не перестали слушать событий на модели, что означает, что модель еще ссылку на вид, сохраняя его от мусора мусора.Это вызвало объем памяти, используемый приложением постоянно растут, и вид все равно будет реагировать на события от модели, хотя она не будет ничего, потому что оказание он был удален из DOM .
Многие расширения и плагины Магистральные — в том числе марионеток — исправить это на ранней стадии.Я не буду вдаваться в подробности о том, что, хотя, потому что разработчики позвоночника в устранены эту проблему самостоятельно в недавно опубликованном Backbone 1.0, добавив listenTo
И stopListening
методы в Events
, которые Магистральная в View
“class” наследует от.Разработчики марионетка имеют так удалены собственную реализацию этой функции, но это не значит, марионеток не поможет намс некоторыми другими вещами, связанными с событием обязательного .
Чтобы сделать привязку к событиям на моделях зрения и коллекций простых, марионеток дает нам несколько свойств для использования при расширении Просмотры марионетка в: modelEvents
и collectionEvents
.Просто передайте объект, где ключи название мероприятия мы, слушая от модели или коллекции, и свойство имя (имена) функции для вызова, когда это событие.Посмотрите на этом простом примере:
Backbone.Marionette.View.extend({ // We don't normally directly extend this view
modelEvents: {
'change:attribute': 'attributeChanged render',
'destroy': 'modelDestroyed'
},
render: function(){ … },
attributeChanged: function(){ … },
modelDestroyed: function(){ … }
});
Это выполняет то же самое, как с помощью listenTo
, за исключением того, требуется меньше кода.Вот эквивалент кода с использованием listenTo
.
Backbone.Marionette.View.extend({ // We don't normally directly extend this view
initialize: function() {
this.listenTo(this.model, 'change:attribute', this.attributeChanged);
this.listenTo(this.model, 'change:attribute', this.render);
this.listenTo(this.model, 'destroy', this.modelDestroyed);
},
render: function(){ … },
attributeChanged: function(){ … },
modelDestroyed: function(){ … }
});
Есть несколько ключевых вещей, чтобы отметить.Во-первых, modelEvents
используется для прослушивания модели Посмотреть профиль, и collectionEvents
используется для прослушивания в коллекцию Посмотреть профиль (this.model
и this.collection
, соответственно).Во-вторых, вы, возможно, заметили, что существует два обратных вызовов для change:attribute
мероприятия.Когда вы указать строку для обратных вызовов, вы можете иметь столько имена функций обратного вызова, как вы хотите, разделенных пробелами.Все эти функции будут вызываться, когда события.Любое имя функции, что вы укажете в строке должно быть метод .__ зрения 0 |
Есть альтернативные способы указать modelEvents
и collectionEvents
, тоже.Во-первых, вместо того, чтобы, используя строку, чтобы указать имена методов на вид, вы можете назначить анонимные функции:
Backbone.Marionette.View.extend({ // We don't normally directly extend this view
modelEvents: {
'change': function() {
…
}
}
});
Это, вероятно, не лучшая практика, но есть вариант, если вам это нужно.Кроме того, вместо того, чтобы просто присвоения литерала объекта до modelEvents
или collectionEvents
, вы можете назначить функцию.Функция нужно будет возвращать объект, который имеет события и обратные вызовы.Это позволяет создать список событий и обратные вызовы динамично.Я не был в состоянии думать ни о каких ситуациях, в которых вы должны были бы определить привязки событий динамически, но если вам это нужно, это может быть очень удобно .
Backbone.Marionette.View.extend({ // We don't normally directly extend this view
modelEvents: function() {
return {'destroy': 'modelDestroyed'};
},
modelDestroyed: function(){ … }
});
The modelEvents
и collectionEvents
особенность следует образцу, что позвоночник и марионеток использовать как можно чаще: передавать код для простой конфигурации.Магистральная сам сделал это с events
хэш, который позволяет легко настроить слушателей событий DOM.Марионетка в modelEvents
и collectionEvents
непосредственно вдохновлен оригинальное events
конфигурации в Backbone.Вы увидите это понятие конфигурации показать много, особенно в последующих статьях, когда мы попадаем в ItemView
, CollectionView
44 ~ и | .
Уничтожение View
Как я уже упоминал в начале предыдущего раздела, иногда необходим вид на быть отброшены или удалены, потому что модель была destroyed 5 или потому, что мы должны показать другую точку зрения на его месте,С stopListening
, у нас есть власть, чтобы очистить все из этих привязок событий.Но то, что об уничтожении остальной зрения?Магистральная имеет remove
функция, которая вызывает stopListening
для нас и также удаляет вид изДОМ .
Как правило, это было бы все, что вам нужно, но принимает его марионеток дальше, добавив close
функцию.При использовании Просмотры марионеток, вы будете хотеть, чтобы позвонить close
а remove
, потому что это будет убирать все вещи, что взгляды марионетка в установленных в фоновом режиме .
Еще одно преимущество предлагаемых марионеток в close
Метод является то, что выстреливает некоторые события.В начале закрытия мнение, то это выстрелить в before:close
событие, а затем close
событие, когда она будет закончена.В дополнение к событиям, вы можете указать методы на том, что будет работать только до этих событий уволили .
Backbone.Marionette.View.extend({ // We don't normally directly extend this view
onBeforeClose: function() {
// This will run just before the before:close event is fired
},
onClose: function(){
// This will run just before the close event is fired
}
});
Если вы хотите запустить код, прежде чем вид полностью исчезает, вы можете использовать onBeforeClose
56 ~ и | методы просмотра автоматически запустить его без вашего необходимости прислушиваться к событиям.Просто объявить методы и марионеток будет убедиться, что они вызываются.Конечно, другие объекты будут по-прежнему необходимо прислушиваться к событиям на вид .
ДОМ Refresh
Назад, когда мы обсуждали Application
, я упомянул Region
немного. …
Если вы хотите прочитать полностью статью, посетите сайт наших спонсоров