0

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

这工作完美无瑕。但是自从我开始使用djangorestframework-gis以来,烬宝不能够处理响应了。

我还没有发现任何人用烬创建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 
      } 
     } 
    ] 
} 

虽然烬希望是这样的:

[{"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。

回答

0

这不是上述问题的有效答案。我想分享我的解决方案, 只是为了防止任何人进入相同的情况:

我现在不返回一个有效的geoJSON,但自定义lat,lng值。以下是Django的REST的架构的后端代码: 型号:

#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") 

灰烬可以轻松处理的格式。