1

バックボーンを使用して API をヒットしているときに、応答に一部のデータのみを含める必要があることがわかりました。Web サーバーは、必要のないオブジェクトに関するデータに加えて、メタデータを返してくれます。

次の解決策は機能しますが、正しくありません。これを行う標準的な方法はありますか?

var accountsCollection = new AccountsCollection();

accountsCollection.fetch({success : function(collection){
    var results = new AccountsCollection();
    collection.each(function(item){
        results.add(new AccountModel({
            id: item.toJSON().result[0].id,
            messageText: item.toJSON().messageText,
            address1: item.toJSON().result[0].address1,
            address2: item.toJSON().result[0].address2
        }));
    });

    onDataHandler(results);
}});

編集:これは、受け入れられた回答に基づく私の最終的な解決策でした:

    parse: function(response) {
        var accounts = [];
        _.each(response['result'], function (account) {
            accounts.push(account);
        });
        return accounts;
    }
4

1 に答える 1

4

メソッドをオーバーライドしてBackbone.Collection.parse、クレイジーなアンダースコアを実行することもできます。それがあなたのデータに適合するかどうかはわかりません..

var keysILike = ['foo', 'bar'];

AccountsCollection.extend({
  parse: function(response) {
    return _.compact(_.flatten(_.map(response, function (model) {
      var tmp = {};
      _.each(_.keys(model), function (key) {
        if (_.contains(keysILike, key)) tmp[key] = model[key];
      })
      return tmp;
    })));
  }
});

@Sushanthの素晴らしさに関して、あなたは間違いなくこのソリューションを使いたいと思っています:

var keysILike = ['foo', 'bar'];

AccountsCollection.extend({
  parse: function(response) {
    _.each(response, function (model) {
      _.each(_.keys(model), function (key) {
        if (!_.contains(keysILike, key)) delete model[key]
      })
    });
    return response;
  }
});
于 2013-07-26T23:47:06.620 に答える