我有一个Backbone集合的视图。当我通过backbone.signalR hub重置集合时,我希望得到一个新的集合,我通过我的集线器,但它只是重置集合,然后像调用collection.add
一样传递给它。所以我在我的集合中的模型中获得了12个属性,其中前6个为空值,最后6个为当前值。
我的收藏包含6个属性的模型。我想用新的6个值重置它们的值。但我无法通过collection.reset()
。
在重置我的集合之前,我有一个对象包含以下6个属性:
customerId: 2,
expectedTimeOfService: "10 min",
id: 6,
noOfWaiting: 13,
queueName: "Cash Deposit",
smsCode: "1234",
重置我的集合后,我得到一个包含以下12个属性的对象:
CustomerId: null,
ExpectedTimeOfService: null,
Id: null,
NoOfWaiting: null,
QueueName: null,
SmsCode: null,
customerId: 2,
expectedTimeOfService: "10 min",
id: 6,
noOfWaiting: 13,
queueName: "Cash Deposit",
smsCode: "1234",
所以,我无法解决问题所在,或者我如何摆脱这个问题。所有我想在收集重置后获得具有更新值的6属性值。
答案 0 :(得分:1)
JavaScript区分大小写,因此CustomerId
与customerId
不同。当Backbone更新模型时,它找不到匹配的属性,因此它会创建一个新属性。
您应该在源代码中修复问题,并将服务返回的JSON密钥更改为lowerCamelCase
。
如果您因某些原因无法更改服务响应,则可以在Model.parse
中修改转化:
var Model = Backbone.Model.extend({
parse: function (attrs) {
var cleaned = {}
_.each(attrs, function(val, key) {
cleaned[key[0].toLowerCase() + key.slice(1)] = val;
});
return cleaned;
}
});
重置时传递选项parse:true
:
collection.reset(data, {parse:true});