У нас есть суперкласс класса Backbone View с шестью подклассами, расширяющими его. Каждый подкласс предназначен для рендеринга определенного типа модели. Сам суперкласс не очень полезен для создания экземпляра. Но было бы очень удобно иметь возможность вызвать этот конструктор суперклассов с помощью модели и вернуть ему представление о соответствующем подклассе для предоставленной модели. Можно ли это сделать с помощью магистрали?Может ли конструктор backbone.js возвращать подкласс?
0
A
ответ
0
Хорошо, я получил его, указав функцию «конструктор», которая вычисляет, вызвана ли она непосредственно или через наследование, проверяя «templateName» - свойство, определяемое всеми моими дочерними классами. Если он вызывается напрямую, он создает новый объект желаемого типа и возвращает его; в противном случае он переходит к своему родительскому конструктору.
То, что я узнал сегодня: это удобная функция JS, которая, если конструктор возвращает объект, этот объект заменяет «это» и становится новым объектом.
Canonical doc on the JS new() function
Мой конструктор выглядит следующим образом:
constructor: function(options){
// without a model we can't know what class to be.
if (_.isUndefined(options) || _.isUndefined(options.model) || ! options.model.has('type'))
throw new Error('new ThingView() called without a valid model.');
// Because we're replacing ourselves with a subclass, constructor will execute twice.
if (! this.templateName) {
// first time through: replace ourselves with a child
var viewName = 'AssetAttributeView_' + options.model.get('type');
return new Views[viewName](options); // replace ourselves with one of these
} else {
// second time through: apply our parent's constructor.
Backbone.View.apply(this, arguments);
}
}
Смежные вопросы
- 1. Может ли конструктор НЕ возвращать новый экземпляр?
- 2. Swift не может возвращать подкласс в суперкласс
- 3. Подкласс конструктор
- 4. Пользовательский конструктор Backbone.js?
- 5. Подкласс супер возвращение самостоятельно должен возвращать подкласс
- 6. Может ли новый конструктор File() возвращать null на Android?
- 7. Может ли конструктор возвращать типы данных в java-подобных методах?
- 8. Может ли конструктор для суперкласса возвращать экземпляры подкласса?
- 9. Подкласс Конструктор не распознан
- 10. Может ли конструктор вернуть субкласс?
- 11. Может ли подкласс наследовать также конструктор родительского класса, или каждый класс имеет свой собственный конструктор?
- 12. Может ли подкласс иметь меньше параметров, чем его подкласс?
- 13. Может ли метод возвращать макет
- 14. Может ли list.iterator() возвращать null?
- 15. Может ли «System.Math.Cos» возвращать (плавать)?
- 16. Может ли функция возвращать массив?
- 17. Может ли Convert.ToDecimal возвращать константу?
- 18. Может ли WebResponse.GetResponseStream() возвращать нуль?
- 19. Может ли XmlSerializer.Deserialize возвращать null?
- 20. Может ли Process.WaitForInputIdle() возвращать false?
- 21. Как заставить подкласс создать конструктор?
- 22. Может ли конструктор использовать Builder
- 23. Может ли POCO содержать конструктор?
- 24. Почему подкласс должен вызвать конструктор суперкласса, прежде чем подкласс может инициализировать свою собственную переменную
- 25. Может ли подкласс также быть суперклассом?
- 26. Может ли подкласс NetChannelInboundHandler быть совместимым?
- 27. Может ли подкласс UIViewController напрямую управлять UIImageView
- 28. Может ли подкласс событий wx :: StaticBoxSizer обрабатывать?
- 29. Может ли метод категории распространяться на подкласс?
- 30. Может ли 'итератор' вводить только подкласс 'const_iterator'?
Как об использовании [Factory Method Pattern] (http://en.wikipedia.org/wiki/Factory_method_pattern)? Добавьте метод к базовому классу, который принимает модель в качестве аргумента и возвращает правильно подобранный подкласс вида? – naomik
У вас нет легкого доступа к функции-конструктору с помощью Backbone, поэтому упростить метод на заводе-изготовителе. –
Модель фабричного метода, вероятно, была бы идеальной, за исключением того, что мы хотим поддерживать обратную совместимость с существующим кодом, который просто называет «новым». (Этот абзац Просмотр суперкласса и его подклассов был единственным классом с гигантским деревом if/then/else в нем.) –