0

Backbone コレクションのビューがあります。backbone.signalR ハブを介してコレクションをリセットすると、ハブを通過する新しいコレクションを取得することが期待されますが、コレクションをリセットするだけで、collection.add渡されたものを呼び出すように機能します。したがって、コレクション内のモデルの 12 個の属性を、最初の 6 個の null 値と最後の 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 では大文字と小文字が区別されるため、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});
于 2013-01-07T10:08:32.253 に答える