1

我对emberjs完全陌生,但很高兴能进去玩。我正在努力解决的一件事是......你能加载一个对象图深度超过 1 的 JSON 对象吗?我的意思是,将模型设置为一系列名称/值对似乎相对简单其中值是一个简单类型(字符串、整数、日期等),但如果它是一个对象呢?

我想它可能连接到关系模型,但从我在文档中看到的内容来看,这只允许 FK->PK 关系而不是内联对象。我可能在解释我的意思方面做得很糟糕,所以让我举个例子:

假设我在端点有一个 REST 调用:http://my.url.com/place/[place_id]并且 GET 调用返回:

{
    place: {
        name: "string",
        desc: "string",
        location: {
            longitude: float,
            latitude: float,
            radius: int
        }
}

在上面的例子中,我很难理解如何建模location。任何有关如何扩展它的帮助将不胜感激:

App.Place = DS.Model.extend({
    name: "string",
    desc: "string",
    location: "?????"
});
4

1 回答 1

1

您可以引入新的数据转换来处理原始 JSON。

DS.RESTAdapter.registerTransform('raw', {
    deserialize: function(serialized) {
        return serialized;
    },  
    serialize: function(deserialized) {
        return deserialized;
    }   
});

现在您可以将模型定义rawlocation.

App.Place = DS.Model.extend({
    name: DS.attr('string'),
    desc: DS.attr('string'),
    location: DS.attr('raw')
});

如果您来自服务器的数据具有以下形式

place: {
    id: 'place',
    name: 'foo',
    desc: 'bar',
    location: {
        longitude: 1,
        latitude: 2,
        radius: 3
    }
}

然后您可以在模板中绑定到location.longitude等。这是在jsfiddle 中充实的

于 2013-03-31T18:31:23.500 回答