У меня было представление, где у меня был очень простой список зарегистрированных пользователей на сайте, и некоторые параметры, такие как создавать, редактировать и удалять все вместе на одном и том же макете и работали.
Поскольку это учебное упражнение для меня, теперь я хотел отделить основной вид от представления деталей или создать представление, поэтому в первую очередь я создал новое представление для создания пользователя, который является очень простой формой с 4 полями на Это.
Это код на основном представлении, который вызывает представление пользователя для пользователя
userCreate: function () {
event.preventDefault();
var createView = new viewAdminCV();
createView.render();
}
и это функция рендеринга в представлении viewAdminCV()
el: $('#frameDetails'),
render: function() {
this.$el.html(templateUserCreate);
}
Нет ошибки при выполнении этого кода, однако ничего не получается. Если я заменю линию
this.$el.html(templateUserCreate);
с
$('#frameDetails').html(templateUserCreate);
он работает отлично, но я хочу понять, почему $ el не работает в этом случае, потому что я работаю в других представлениях.
Цените, что помогаете.
В случае необходимости полный код находится в этой ссылке https://github.com/GabrielBarcia/UsersMod/blob/iss3/public/js/views/admin_CV.js
В принципе, вы обнаруживаете элемент #frameDetails
"слишком рано". Легко забыть, что когда вы используете то, что они называют экземпляром "jQuery Element", вы действительно используете функцию. Это означает, что в вашем коде он пытается найти #frameDetails
в тот момент, когда вы запускаете "расширяться" на этом Backbone.View. Вы хотите найти элемент в new viewAdminCV()
(извиняюсь, если я new viewAdminCV()
...).
НО, чтобы исправить это, есть три способа. Один из них традиционно, вам просто нужно играть в литеральной строке без оболочки jQuery, тогда Backbone найдет ее:
el: '#frameDetails',
render: function() {
this.$el.html(templateUserCreate);
}
ИЛИ
вы можете обернуть это обработчиком
el: function(){
return $('#frameDetails')
},
render: function() {
this.$el.html(templateUserCreate);
}
ИЛИ даже перемещение слайкера, вы вводите его из файла "admin.js". Затем вы не объявляете свойство el в классе viewAdminCV
:
userCreate: function () {
event.preventDefault();
$('#btnUserCreate').prop( 'disabled', true );
var createView = new viewAdminCV({ el: $('#frameDetails') });
createView.render();
}
У вас уже есть el как объект.
el: $('#frameDetails')
Таким образом, вам не нужно использовать $ el при рендеринге.
Использование:
el: $('#frameDetails'),
render: function() {
this.el.html(templateUserCreate);
}
el: $(...)
, не означает, что this.el
будет DOM-узлом с jQuery- this.el
.