0

我正在尝试将 Ember.js 和 Flask Restless 结合起来,但在连接 JSON API 时遇到了困难。

问题是我需要按摩 JSON 以匹配 Ember 期望的客户端。

Ember 正在发送这样的内容POST

u'todo': {u'isCompleted': False, u'title': u'hello'}}

但 Flask Restless 期待这样的事情

{'is_completed': False, 'title': u'hello'}

我可以做到这一点,如下所示,但是由于 Flask Restless preproccesor 不接受返回参数,并且数据对象必须就地更改并且创建包含我想要的内容的新 dict 将不起作用。所以我需要通过添加和删除我需要的键来笨拙地改变给定的数据字典。

有没有人有更好的解决方案可以轻松扩展到更复杂的模型?

def ember_formatter(result):
    for key in result.keys():
        if key != 'objects':
            del result[key]

    result['todos'] = result['objects']
    del result['objects']

def pre_ember_formatter(data=None, **kw):

    data['is_completed'] = data['todo']['isCompleted']
    data['title'] = data['todo']['title']
    del data['todo']

restless_manager.create_api(
    Todo,
    methods=['GET', 'POST', 'DELETE', 'PUT', 'PATCH'],
    url_prefix='/api',
    collection_name='todos',
    results_per_page=-1,
    postprocessors={
        'GET_MANY': [ember_formatter]
    },
    preprocessors={
        'POST': [pre_ember_formatter],
    }
)
4

2 回答 2

0

我不是 100% 确定不安 api 映射到 django-rest-framework 有多接近,但在您上面的示例中,DRF 适配器将开箱即用。

https://github.com/toranb/ember-data-django-rest-adapter

使用这种方法,您可以保持 JSON api 不变,只需插入新的客户端适配器

于 2013-12-10T05:15:12.433 回答
0

我会把这个交给托兰,因为他的方法最终导致了启蒙之路,但我想明确说明我是如何做到这一点的。

我发现在客户端,在 Ember 中进行所有这些更改实际上更容易。一般的想法是您需要更改从服务器传入的 JSON,并更改离开客户端的 JSON。

这一切都在DS.RESTSerializer类中完成,如果你看一下,那里有关于如何做到这一点的示例,一旦你习惯了 Ember 的文档就很棒。

因此,要修改从服务器传入的 JSON,您需要修改 extractArray 和 extractSingle 函数。

要修改离开客户端的 JSON,您需要修改 serialize 和 serializeIntoHash 函数,非常简单。

我认为在 Ember 中完成这一切是有意义的,因为您通常无法控制与之交谈的 API。

于 2013-12-14T11:56:35.420 回答