【问题标题】:How to make ember work with Django REST gis如何使 ember 与 Django REST gis 一起工作
【发布时间】:2014-11-30 13:00:27
【问题描述】:

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

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

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

这是 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。

【问题讨论】:

    标签: ember-data django-rest-framework gis geojson django-rest-framework-gis


    【解决方案1】:

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

    我现在不返回有效的 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 可以轻松处理格式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-22
      • 1970-01-01
      • 1970-01-01
      • 2019-09-08
      • 1970-01-01
      • 2014-12-08
      • 1970-01-01
      相关资源
      最近更新 更多