0

我目前正在尝试使用 ember-django-adapter 设置 ember 以与 Django 的 REST 框架进行交互。

这完美无瑕。但是自从我开始使用 djangorestframework-gis 后,ember 就无法再处理响应了。

除了: https ://gist.github.com/cspanring/5114078 之外,我还没有找到任何人使用 ember 构建 geoJSON但这似乎不是正确的方法,因为我不想更改数据模型?

这是 api 响应:

{
    "type": "FeatureCollection",
    "features": [
        {
            "id": 1,
            "type": "Feature",
            "geometry": {
                "coordinates": [
                    9.84375,
                    53.665466308594
                ],
                "type": "Point"
            },
            "properties": {
                "date_created": "2014-10-05T20:08:43.565Z",
                "body": "Hi",
                "author": 1,
                "expired": false,
                "anonymous": false,
                "input_device": 1,
                "image": "",
                "lat": 0.0,
                "lng": 0.0
            }
        }
    ]
}

虽然 ember 期望类似:

[{"id":1,
"date_created":"2014-10-05T20:08:43.565Z",
"body":"Hi",
"author":1,
"expired":false,
"anonymous":false,
"input_device":1,
"image":"",
"lat":0,
"lng":0
}
]

我对此的看法是编写我自己的序列化器:

import Ember from "ember";
import DS from "ember-data";

export default DS.DjangoRESTSerializer.extend({
    extractArray: function(store, type, payload) {
        console.log(payload);
        //console.log(JSON.stringify(payload));
        var features = payload["features"];
        var nPayload = [];
        for (var i = features.length - 1; i >= 0; i--) {
            var message = features[i];
            var nmessage = {"id": message.id};
            for(var entry in message.properties){
                var props = message.properties;
                if (message.properties.hasOwnProperty(entry)) {
                    var obj = {}
                    nmessage[entry]=props[entry];
            }
            }
            nPayload.push(nmessage);
        };
        console.log(nPayload); //prints in the format above
        this._super(store, type, nPayload);
    },
    }) 

但我收到以下错误:

The response from a findAll must be an Array, not undefined

我在这里想念什么?或者这是错误的方法?有没有人试图让这个工作?

另一种方法是在服务器端处理这个问题,并简单地输出一个常规的 restframework 响应并在后端设置 lat 和 long 。

4

1 回答 1

0

这不是上述问题的有效答案。无论如何,我想分享我的解决方案,以防万一有人遇到同样的情况:

我现在不返回有效的 geoJSON,而是自定义 lat、lng 值。以下是 django-rest-framework 的后端代码: 模型:

#models/message.py

class Message(models.Model):
    def lat(self):
        return self.location.coords[1]
    def lng(self):
        return self.location.coords[0]

在序列化器中:

#message/serializer.py

class MessageSerializer(serializers.ModelSerializer):
    lat = serializers.Field(source="lat")
    lng = serializers.Field(source="lng")

Ember 可以轻松处理格式。

于 2014-10-10T09:57:20.260 回答