Всем привет!
Имеется следующая проблема:
Решил переделать архитектуру своего тестового задания по Backbone слдующим образом.
Сначала у меня колекции фетчились прямо в View, в функции render. Услышал. что так делать нехорошо, поэтому переделываю так, чтоб колекция фетчилась в router, а данные передавались в view.
Попробовал делать так:
view:
define([
'jquery',
'underscore',
'backbone',
'form2js',
"pages/test/collections/users",
"pages/test/models/user",
'text!pages/test/templates/users.html'
], function($, _, Backbone, form2js, UsersCollection, UserModel, UsersTemplate) {
var UsersView = Backbone.View.extend({
el: '#main_content',
initialize: function(users) {
this.users = users;
_.bindAll(this, 'render', this);
},
render: function() {
var that = this;
var template = _.template(UsersTemplate, {
users: users;
});
this.$el.html(template);
}
И, собственно routes.
define([
"pages/test/views/usersView",
"pages/test/collections/users",
],
function(usersView, UsersCollection) {
return Backbone.Router.extend({
routes: {
"users": 'users',
},
users: function() {
users = new UsersCollection();
users.fetch();
console.log(users);
if (typeof UsersView === "undefined") {
UsersView = new usersView();
};
UsersView.render({
users: users
});
}
Проблема вот какая:
Теперь ничего не рендерится, и на строчке
UsersView = new usersView();
в консоли ошибка
routes.js: Uncaught TypeError: undefined is not a function
. Я понимаю, что делаю что то не так, но к сожалению не сильно знаком с JS чтобы решить проблему самостоятельно.
Буду благодарен за советы и ответы!
п.с. Правильно ли фетчить колекцию в router? Если нет, то где это нужно делать?
Спасибо!