簡體   English   中英

如何在backbone.js中進行自定義模型數據解析?

[英]How do I do custom model data parsing in backbone.js?

使用骨干來命中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;
    }

您可以嘗試重寫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;
  }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM