i--*_*i-- 7 model composite-key backbone.js
我在我的模型中使用复合键并根据我的复合键生成ID:
app.Assignment = Backbone.Model.extend({
idAttribute : [ 'personId', 'jobId' ],
parse : function(resp) {
resp.id = resp.personId + "_" + resp.jobId;
return resp;
}
});
Run Code Online (Sandbox Code Playgroud)
但是Backbone仍然认为Assignment的所有实例都是新的,尽管我在从API中获取它时在parse方法中设置了id.因此,Backbone没有DELETE,并且在更新时执行POST而不是PUT.我该如何解决这个问题或者"正确的方法"呢?
更新:
看起来像用this.id替换resp.id解决了这个问题.
parseBackbone.Model 方法的结果将传递给该set方法,该方法设置模型的属性。我认为您感到困惑的一点是模型的 ID 不是它的属性之一;而是模型的 ID 不是它的属性之一。这是它的特性之一。
那么,发生的事情是这样的:
parseid属性,被传递到setset看起来和你的idAttribute( [ 'personId', 'jobId' ]) 以及原始数据中的所有键idAttribute,因此它们都不会用作模型的 ID,因此您会遇到问题。this.id您的内部设置解决方案parse是有效的,但它可能会导致问题,因为解析通常被设计为对其输入(原始数据)进行操作,而不是修改模型本身;该部分应该在接下来set被调用时发生。更干净的解决方案是执行如下操作:
app.Assignment = Backbone.Model.extend({
// note that no idAttribute is specified, leaving it as the default "id"
parse : function(resp) {
resp.id = resp.personId + "_" + resp.jobId;
return resp;
}
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您想要不同的 ID 属性...
app.Assignment = Backbone.Model.extend({
idAttribute: 'personAndJobId',
parse : function(resp) {
resp.personAndJobId = resp.personId + "_" + resp.jobId;
return resp;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1212 次 |
| 最近记录: |