単純な「カウンター」アプリケーションを使用して、backbone.jsとcouchdbで作業を開始し、ロープを学習しました。localstorage を使用するバージョンはここにあります: demo fiddle。増減可能なカウンターを表示するシンプルなアプリです。カウンターの値はデータベースに保存されます。参照されているバージョンでは、問題なく動作するように見える localstorage を使用しています。
私の例をcouchdbを使用するように変換すると、問題が発生します。したがって、couchapp を作成し、backbone-couchdb コネクタで動作するようにコードを調整しました。また、db config 属性も含めました (ここで説明したように)。コードの関連する (適応された) 部分を以下に示します (要は 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 を取得することがわかりました。これはそうではないようですか?私は何を間違っていますか?
おそらく、アプリの別の関連部分は、Counter モデルをインスタンス化する場所です (デモ フィドルでも確認できます)。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
});
}