[英]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.