Используя внешний шаблон, я пытаюсь отобразить представление JS Backbone в DOM. К сожалению, я получаю пустой экран, а проверка с помощью консоли подтверждает, что все работает.
Чтобы получить визуализированный шаблон в DOM, я должен сделать что-то вроде $('body').append(myView.render().el);
, которое, согласно многим ресурсам, не должно быть необходимым. Например, this view от реализации Backbone проекта TodoMVC не включает ничего подобного $('body').append
, что заставляет меня поверить в то, что в моем коде что-то не так, но я не могу его найти.
шаблон в моем HTML выглядит следующим образом:
<script id="name-template" type="text/template">
<%= name %> (<%=age %>)
</script>
И это код приложения:
var App = App || {};
App.Models = {};
App.Views = {};
App.Models.Person = Backbone.Model.extend({
defaults: {
name: 'Peter',
age: 34
}
});
App.Views.Person = Backbone.View.extend({
tagName: 'p',
template: _.template($('#name-template').html()),
initialize: function() {
console.log(this.model);
}
});
App.personModel = new App.Models.Person();
App.personView = new App.Views.Person({model: personModel});
App.personView.render();
Что я должен изменить так, чтобы при загрузке страницы, тонированное шаблон добавлен DOM?
в примере todoMVC элемент вида уже находится на странице –
Но посмотрите [# 35 из Appview] (https://github.com/tastejs/todomvc/blob/gh-pages/examples/backbone/js/ views/app-view.js # L35) и [# 80] (https://github.com/tastejs/todomvc/blob/gh-pages/examples/backbone/js/views/app-view.js#L80) Разделение div на представление должно быть выполнено жестко. Точно так же ваше приложение может иметь div, в который будет отображаться представление, иначе $ ('body') является единственным способом. – Dhiraj
Вы можете установить 'el' для указания на существующий элемент DOM, и если вы это сделаете , нет необходимости добавлять его снова. Я нахожусь в лагере, который считает, что связывание существующего DOM с вашим базовым приложением - плохая практика, которая создает ненужную жесткую связь. –