所以我有這樣的要求,當我去whitelist
路線時,我從API獲取白名單用戶列表。我的模型和序列化是這樣的:Ember CLI:在商店中推送自定義記錄
型號/ whitelist.js
import BaseUser from './base-user';
var Whitelist = BaseUser.extend({});
export default Whitelist;
型號/基user.js的
import Ember from 'ember';
import DS from 'ember-data';
var attr = DS.attr;
export default DS.Model.extend({
name: attr(),
username: attr(),
description: attr(),
profilePicture: attr(),
followersCount: attr(),
followsCount: attr(),
postCount: attr(),
verified: attr(),
following: attr('boolean'),
whitelisted: attr('boolean'),
blacklisted: attr('boolean'),
unfollow: followUnfollow,
follow: followUnfollow,
whitelist: whitelist,
unwhitelist: unWhitelist,
blacklist: blacklist,
unblacklist: unBlacklist,
reply: reply,
getLists: getLists,
createdAt: attr()
});
串行器/ base.js
import DS from 'ember-data';
var serializeCollection = function(store, type, payload, id, requestType) {
payload.records = payload.records ? payload.records : [];
var users = payload.records.map(function(record) {
record = record.user ? record.user : record;
var user = {
id: record.id,
name: record.name || record.fullName,
username: record.screenName || record.username,
description: record.description || record.bio,
profilePicture: record.profileImageURLHttps || record.profilePicture,
followersCount: record.followersCount,
followsCount: record.friendsCount || record.followsCount,
postCount: record.statusesCount || 0,
verified: record.verified || false,
createdAt: record.createdAt || false
};
return user;
});
return users;
};
export default DS.RESTSerializer.extend({
extractFindAll: serializeCollection,
extractFindQuery: serializeCollection
});
serializers/whitelist.js
import Ember from 'ember';
import Base from './base';
var serializeCollection = function(store, type, payload, id, requestType) {
/* Here payload is of the form:
* {
* cursor: null,
* records: [{
* user: {}
* friendship: {}
* }]
* }
*/
var data = this._super(store, type, payload, id, requestType);
return data.map(function(item) {
return Ember.$.extend(item, {
following: true,
whitelisted: true,
blacklisted: false
});
});
};
export default Base.extend({
extractFindAll: serializeCollection,
extractFindQuery: serializeCollection
});
現在基於一些動作,我在控制器中獲取一個新的記錄是這樣的:
actions: {
addToWhitelist: function() {
var _this = this;
Ember.$.get(url).then(function(data) {
/*
*The data here is in this form
* {
* frienship: {},
* user: {}
* }
*/
//What should I do here so that my serializers get called?
});
return false;
}
}
我應該怎麼做,這樣我可以把記錄到我已經填充店,使得串行會被稱爲,首先whitelist
序列化程序,然後從它內部,application
序列化程序?
的問題是,API不是RESTful的。所以我不能做一個帖子請求。我做了一個GET請求。這樣可以節省我想要保存在服務器上的數據,並返回一個我想推送到我的商店的對象(使它穿過串行器後)。說得通? – 2015-02-09 11:10:23
它的確很有意義! :)你可以使用'DS.Adapter'並重寫'createRecord'和'updateRecord'方法。您只需複製並粘貼現有的'createRecord'並根據你的需要調整它:https://github.com/emberjs/data/blob/v1.0.0-beta.14.1/packages/ember-data/lib/adapters/rest_adapter.js#L469 – andrusieczko 2015-02-09 12:20:26
雖然這可以是一種方式,當然,您是否知道我是否可以通過某種方式將從我的請求中獲得的原始數據推送到我的商店中,並確保它是序列化的? – 2015-02-09 12:42:14