У меня есть следующий код backbone.js. Я использую литерал объекта для организации своего кода, поэтому у меня возник вопрос о том, как лучше всего продолжить. Приложение (в упрощенной форме ниже) имеет панель управления (которая может быть отображена или скрыта), которая используется для добавления новых категорий в коллекцию. (Вопрос следует)
(function($){
// ============================= NAMESPACE ========================================
var categoryManager = categoryManager || {};
// ============================= APPLICATION =================================================
categoryManager.app = categoryManager.app || {
/* Used to Initialise application*/
init: function(){
//this.addView = new this.addCategoryView({el: $("#add-new-category")})
//this.collection = new this.categoryCollection();
new this.addCategoryView({el: $("#add-new-category")})
new this.categoryCollection();
},
categoryModel: Backbone.Model.extend({
name: null
}),
addCategoryView: Backbone.View.extend({
events: {
"click #add-new-category-button.add" : "showPanel",
"click #add-new-category-button.cancel" : "hidePanel",
"click #new-category-save-category" : "addCategory"
},
showPanel: function() {
$('#add-new-category-button').toggleClass('add').toggleClass('cancel');
$('#add-new-category-panel').slideDown('fast');
},
hidePanel: function() {
$('#add-new-category-button').toggleClass('add').toggleClass('cancel');
$('#add-new-category-panel').stop().slideUp('fast');
},
addCategory: function() {
//categoryManager.app.collection.create({
categoryManager.app.categoryCollection.create({ // My Problem is with this line
name: $('#name').val()
});
}
}),
categoryCollection: Backbone.Collection.extend({
model: this.categoryModel,
initialize: function () {
}
})
}
// ============================= END APPLICATION =============================================
/* init Backbone */
categoryManager.app.init();
})(jQuery);
Теперь очевидно, что проблема с вышеизложенным заключается в том, что при вызове функции addCategory пытается вызвать функцию для объекта, который не инициализирован. Я обошел проблему (см. Закомментированный код), вызвав функцию вместо для объекта, экземпляр которого создается в функции init. У меня вопрос - правильно ли это? Я чувствую запах кода. Я считаю, что содержание литерала объекта не должно полагаться на создаваемый объект, чтобы быть действительным. функция addCategory в этом случае не будет работать, если сначала функция init не была вызвана в родительском элементе. Есть ли здесь другой шаблон, который мне следует использовать?
Как еще я мог бы передать содержимое формы создания новой категории в коллекцию, чтобы ее добавить (я использую create, потому что хочу автоматически проверять / создавать / сохранять модель, и это кажется самым простым делом ). Я новичок на дне с позвоночником (это мой `` привет, мир '')
Спасибо