我剛剛開始使用backbone.js和couchdb使用簡單的「計數器」應用程序來學習繩索。使用localstorage的版本可以在這裏找到:demo fiddle。這是一個簡單的應用程序,它顯示一個可以遞增和遞減的計數器。計數器的值存儲在數據庫中。在引用的版本中,我正在使用localstorage,這似乎工作得很好。Backbone-couchdb連接器錯誤:必須指定url屬性或函數
當我將示例轉換爲使用couchdb時,問題出現了。因此,我創建了一個couchapp並使代碼適用於backbone-couchdb connector。我還包括數據庫配置屬性(如提到here)。代碼的相關(適應)部分可以在下面找到(這可以歸結爲包含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();
}
});
但是,每當我遞增或遞減計數器,以下錯誤棱:「A‘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
});
}
謝謝您響應。添加urlRoot屬性修復了錯誤,但似乎沒有使行爲正確(即,重新啓動應用程序時我沒有得到持久化模型 - 但這也可能是由於其他原因)。無論如何,我對你提到的url屬性感到非常困惑,因爲它似乎與文檔相矛盾:http://documentcloud.github.com/backbone/#Model-url還是不這樣做? thx任何進一步的澄清。 –
從我看到的雙重檢查文檔後,你設置集合的url屬性並認爲它將成爲你所需要的全部內容。然而,從我目前所瞭解和知道的情況來看,這個屬性只有在同步整個Collection的時候才起作用(也就是說,如果你有3個使用'1','2'和'3'的模型作爲id,集合將會同步他們到'root/1'等等)。但是,您的代碼會單獨保存模型,因此他們不知道它們是哪個集合。這就是爲什麼你需要在模型中提供'url'或'urlRoot'。這或多或少是文檔說的^^ – Meta