是否可以使Backbone.js使用复合键?
Id est,我不想将id
或idAttributemodel
设置为特定值,而是想知道Backbone.js我将使用多个属性。通过这种方式,每个RESTful调用都会发送这两个参数来识别我们正在谈论的对象。
为了举个例子,假设我想将一个人的债务更新为特定的人,模型是:
Borrower (borrowerId, name, ...)
Lender (lenderId, name, ...)
Debt (borrowerId, lenderId, debtAmount)
所以,我现在想让Backbone.js更新/删除一个债务对象。如何使用复合键(borrowerId, lenderId)
?
答案 0 :(得分:4)
您可以按照Backbone's documentation中的建议覆盖模型的url()
实施:
var Debt = Backbone.Model.extend({
url: function() {
var base = /* your base URL here */;
if (this.isNew()) return base;
return base + (base.charAt(base.length - 1) == '/' ? '' : '/') + encodeURIComponent(this.get("borrowerId")+"_"+this.get("lenderId"));
}
});
上述代码会生成baseURL/borrowerId_lenderId
形式的网址。请注意,在构建模型的URL时,您可能需要考虑集合基本URL。
答案 1 :(得分:0)
您需要覆盖集合上的URL函数和modelid函数。默认情况下,URL只知道如何处理单个属性,因此您需要一种方法来映射它。
集合使用字典在get期间查找元素。有一个modelId函数将模型转换为强,表示在字典中使用的键。对于化合物,你可以返回'' + id1 +' - ' + id2或类似。