我正在为不合格的 JSON 数据实现一个自定义适配器。数据被拉入,但属性没有被具体化。我有以下地图:
// map function has not been overridden - RESTAdapter is super.
DS.ArcGisAdapter.map("App.Cai", {
caiId: { key: "CAIID" },
name: { key: "ANCHORNAME" }
});
对于我的主键:
App.restSerializer.configure("App.Cai", {
primaryKey: "CAIID"
});
像这样使用App.Cai
(模型):
var attr = DS.attr,
belongsTo = DS.belongsTo;
App.Cai = DS.Model.extend({
caiId: attr("string"),
name: attr("string")
});
从我的模板中,我通过{{debugger}}
&获取此数据(为演示而缩短) {{log item}}
:
_data: {
attributes: {
caiId: null
name: null
},
id: null
},
id:"130012000149"
如您所见,该 id 来自顶层,但低于它并没有映射到那里,caiId
也没有映射到name
那里。以下是findQuery
我的自定义适配器的功能:
findQuery: function(store, type, query, recordArray) {
var root = this.rootForType(type),
transformedJSON = {},
adapter = this,
rejectionHandler = function (reason) {
Ember.Logger.error(reason, reason.message);
throw reason;
};
return this.ajax(this.buildURL(root), "GET", {
data: query
}).then(function(json){
var feature,
index = 0;
root = root + "s";
transformedJSON[root] = [];
for(;index < json.features.length; index++) {
feature = json.features[index];
transformedJSON[root].push(feature.attributes);
}
adapter.didFindQuery(store, type, transformedJSON, recordArray);
}).then(null, rejectionHandler);
}
欢迎任何想法!谢谢:) PS如果您需要任何其他信息,请告诉我。
编辑:要点到 JSON 数据前/后转换。
编辑2:我想出了一个技巧,但这并不能解决问题。
我扩展了 JSONSerializer 并将其设置为我的适配器的序列化程序。我必须实现keyForAttributeName
钩子,如果映射不返回任何东西,这是后备。这是我的实现:
keyForAttributeName: function (type, name) {
var attributes = (Ember.meta(DS.ArcGisAdapter, true)["DS.Mappable"] || {}).attributes,
guid = Ember.guidFor(type.toString()),
result = name;
if (attributes && guid) {
result = attributes.values[guid][name].key;
}
return result;
}
仍在寻找有关为什么我的模型缺少地图的任何帮助。