У меня есть несколько моделей Backbone, которые отображаются в виде коллекции, а также у меня есть маршрут, который должен отображать представление этой модели. Так, сюда приходят взглядыОшибка метода модели при попытке навигации
resume.js
// this renders a single model for a collection view
var ResumeView = Backbone.View.extend({
model: new Resume(),
initialize: function() {
this.template = _.template($('#resume').html());
},
render: function() {
this.$el.html(this.template(this.model.toJSON));
return this;
}
});
#resume template
<section id="resume">
<h1><%= profession %></h1>
<!-- !!!!! The link for a router which should navigate to ShowResume view -->
<a href="#resumes/<%= id %>">View Details</a>
</section>
вид Коллекция:
var ResumeList = Backbone.View.extend({
initialize: function (options) {
this.collection = options.collection;
this.collection.on('add', this.render, this);
// Getting the data from JSON-server
this.collection.fetch({
success: function (res) {
_.each(res.toJSON(), function (item) {
console.log("GET a model with " + item.id);
});
},
error: function() {
console.log("Failed to GET");
}
});
},
render: function() {
var self = this;
this.$el.html('');
_.each(this.collection.toArray(), function (cv) {
self.$el.append((new ResumeView({model: cv})).render().$el);
});
return this;
}
});
Код выше работает отлично и делает именно то, что мне нужно - An массив моделей выбирается из моего локального JSON-сервера и каждый mo del отображается в виде коллекции. Однако проблема начинается, когда я пытаюсь перемещаться по моей ссылке в шаблоне выше. Здесь приходит маршрутизатор:
var AppRouter = Backbone.Router.extend({
routes: {
'': home,
'resumes/:id': 'showResume'
},
initialize: function (options) {
// layout is set in main.js
this.layout = options.layout
},
home: function() {
this.layout.render(new ResumeList({collection: resumes}));
},
showResume: function (cv) {
this.layout.render(new ShowResume({model: cv}));
}
});
и, наконец, ShowResume
вид:
var ShowResume = Backbone.View.extend({
initialize: function (options) {
this.model = options.model;
this.template = _.template($('#full-resume').html());
},
render: function() {
this.$el.html(this.template(this.model.toJSON()));
}
});
Я не предоставил шаблон для этой точки зрения, потому что это довольно большой, но ошибка заключается в следующем: каждый раз, когда я пытаюсь для перехода к ссылке, просмотр пытается выполнить рендеринг, но возвращает мне следующую ошибку: Uncaught TypeError: this.model.toJSON is not a function.
Я подозреваю, что мой метод showResume
в маршрутизаторе недействителен, но я не могу получить способ, чтобы он работал правильно.
Еще раз спасибо Эмилю! странно, но теперь он возвращает мне ошибку «профессия не определена», хотя шаблон почти такой же, как приведенный выше. – AlexNikolaev94
@ AlexNikolaev94. Я обновил ответ, чтобы обеспечить способ, которым он может работать, но это действительно основательно, и вы скорее всего, проверит, например, онлайн, которые демонстрируют хорошие шаблоны для маршрутизации и просмотров. –
спасибо, Эмиль! он работал, но теперь он возвращает ту же ошибку, что и тот, о котором я упомянул в предыдущем вопросе: «Необходимо указать свойство или функцию« url ». Я должен выяснить, как получить данные, полученные из коллекции – AlexNikolaev94