首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以把附加的参数传递给Ember-Model belongsTo吗?

我可以把附加的参数传递给Ember-Model belongsTo吗?
EN

Stack Overflow用户
提问于 2013-11-28 16:33:55
回答 1查看 237关注 0票数 0

我需要传递额外的参数给Ember的belongsTo。我让它使用它自己的属性类型。但我也需要有关系。这有可能吗?

代码语言:javascript
复制
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:

代码语言:javascript
复制
{
  "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"
},

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-28 18:58:20

我明白你现在在说什么,你需要覆盖getBelongsTo和s

这是默认的实现。

代码语言:javascript
复制
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);       
  }
}

你可以把它改成这样的

代码语言:javascript
复制
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);
    }
  }


});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20270960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档