簡體   English   中英

我可以將其他參數傳遞給Ember-Model屬於嗎?

[英]Can I pass additional parameters to Ember-Model belongsTo?

我需要將其他參數傳遞給Ember-Model的belongsTo。 我讓它可以使用自己的屬性類型。 但是我也需要建立關系。 有可能嗎?

UserType = {
  serialize: function(objectId) {
    return {
      __type: 'Pointer',
      className: '_User',
      objectId: objectId
    };
  },

  deserialize: function(object) {
    return object.objectId;
  }
};

App.Movie = Ember.Model.extend({
  objectId: Ember.attr(),

  createdAt: Ember.attr(),
  updatedAt: Ember.attr(),

  owner: Ember.attr(UserType),
  // owner: Ember.belongsTo('App.User', {
  //   key: 'objectId'
  // }),
});

App.User = Ember.Model.extend({
  objectId: Ember.attr(),
  username: Ember.attr(),
  email: Ember.attr(),

  createdAt: Ember.attr(),
  updatedAt: Ember.attr(),
});

App.User.primaryKey = 'objectId';

這是電影的JSON:

{
  "ratings": [
    {
      "objectId": "AQWYN32UUo",
      "value": 4
    }
  ],
  "title": "Inception",
  "watched": true,
  "year": "2010",
  "owner": {
    "__type": "Pointer",
    "className": "_User",
    "objectId": "AQWYN32UUo"
  },
  "createdAt": "2013-11-28T15:38:40.730Z",
  "updatedAt": "2013-11-28T15:55:37.114Z",
  "objectId": "0x5tdCcWiy"
},

謝謝

我知道您現在在說什么,您需要重寫getBelongsTo和s

這是默認實現

Ember.Model.reopen({
  getBelongsTo: function(key, type, meta) {
    var idOrAttrs = get(this, '_data.' + key),
        record;

    if (Ember.isNone(idOrAttrs)) {
      return null;
    }

    if (meta.options.embedded) {
      var primaryKey = get(type, 'primaryKey');
      record = type.create({ isLoaded: false });
      record.load(idOrAttrs[primaryKey], idOrAttrs);
    } else {
      record = type.find(idOrAttrs);
    }

    return record;
  }
});

serializeBelongsTo: function(key, meta) {
  if (meta.options.embedded) {
    var record = this.get(key);
    return record ? record.toJSON() : null;
  } else {
    var primaryKey = get(meta.getType(), 'primaryKey');
    return this.get(key + '.' + primaryKey);       
  }
}

您可以將其更改為這樣的內容

owner: Ember.belongsTo('App.User', {key: 'owner', serializer:UserType}),


Ember.Model.reopen({
  getBelongsTo: function(key, type, meta) {
    var idOrAttrs = get(this, '_data.' + key),
        record;

    if (Ember.isNone(idOrAttrs)) {
      return null;
    }

    // THIS IS NEW
    if (meta.options.serializer){
      idOrAttrs = meta.options.serializer.deserialize(idOrAttrs);
    }

    if (meta.options.embedded) {
      var primaryKey = get(type, 'primaryKey');
      record = type.create({ isLoaded: false });
      record.load(idOrAttrs[primaryKey], idOrAttrs);
    } else {
      record = type.find(idOrAttrs);
    }

    return record;
  },

  serializeBelongsTo: function(key, meta) {
    if (meta.options.embedded) {
      var record = this.get(key);
      return record ? record.toJSON() : null;
    } else {

      // THIS IS NEW
      if(meta.options.serializer){
        return meta.options.serializer.serialize(record);
      }
      var primaryKey = get(meta.getType(), 'primaryKey');
      return this.get(key + '.' + primaryKey);
    }
  }


});

暫無
暫無

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

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