我刚开始使用一个简单的“计数器”应用程序来学习主干.js 和 couchdb。可以在此处找到使用本地存储的版本:demo fiddle。这是一个简单的应用程序,显示一个可以递增和递减的计数器。计数器的值存储在数据库中。在引用的版本中,我使用的是 localstorage,它似乎工作得很好。
当我将示例转换为使用 couchdb 时,问题就出现了。因此,我创建了一个 couchapp 并修改了代码以与骨干沙发连接器一起使用。我还包括了 db 配置属性(如此处所述)。代码的相关(改编)部分位于下面(归结为包含 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
});
}