带复合键的Backbone.js

时间:2012-02-22 23:32:04

标签: javascript backbone.js composite-key composite-primary-key

是否可以使Backbone.js使用复合键?

Id est,我不想将ididAttributemodel设置为特定值,而是想知道Backbone.js我将使用多个属性。通过这种方式,每个RESTful调用都会发送这两个参数来识别我们正在谈论的对象。

为了举个例子,假设我想将一个人的债务更新为特定的人,模型是:

Borrower (borrowerId, name, ...)
Lender (lenderId, name, ...)
Debt (borrowerId, lenderId, debtAmount)

所以,我现在想让Backbone.js更新/删除一个债务对象。如何使用复合键(borrowerId, lenderId)

2 个答案:

答案 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或类似。