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

灰燼可以輕鬆處理的格式。

相關問題