0

我有一个 Backbone 集合的视图。当我通过backbone.signalR 集线器重置集合时,我希望得到一个通过集线器传递的新集合,但它只是重置集合,然后像调用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 属性值。

4

1 回答 1

1

JavaScript 区分大小写,因此CustomerIdcustomerId. 当 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});
于 2013-01-07T10:08:32.253 回答