Я только начал работать с backbone.js и CouchDB, используя простое «встречное» приложение, чтобы изучить основы. Версию, использующую localstorage, можно найти здесь: демонстрационная скрипта. Это простое приложение, отображающее счетчик, который можно увеличивать и уменьшать. Значение счетчика хранится в базе данных. В версии, на которую ссылаются, я использую localstorage, который работает нормально.
Проблема возникает, когда я преобразовываю свой пример для использования CouchDB. Поэтому я создал диван-приложение и адаптировал код для работы с коннектором backbone-couchdb. Я также включил атрибуты конфигурации БД (как упоминалось здесь ). Соответствующая (адаптированная) часть кода находится ниже (которая сводится к включению атрибута url).
var Counter = Backbone.Model.extend({
defaults: {
countervalue: 0
},
initialize: function() {
_.bindAll(this);
},
increment: function() {
this.save({countervalue: this.get('countervalue') + 1});
},
decrement: function() {
this.save({countervalue: this.get('countervalue') - 1});
}
});
var Counters = Backbone.Collection.extend({
model: Counter,
url : "counters",
initialize: function() {
this.fetch();
}
});
Однако всякий раз, когда я увеличиваю или уменьшаю счетчик, возникает следующая ошибка: «Должно быть указано свойство или функция« url »». Из документации я понял, что модель получает свой URL-адрес из коллекции, в которой она содержится. Кажется, это не так? Что я делаю неправильно?
Возможно, еще одна важная часть приложения — это место, где я создаю экземпляр модели счетчика (ее также можно увидеть в демонстрационной скрипте); метод инициализации AppView:
initialize: function() {
var currentCounter;
if (theCounters.size() > 0) currentCounter = theCounters.last();
else {
currentCounter = new Counter();
theCounters.push(currentCounter);
}
this.counterview = new CounterView({
model: currentCounter
});
}