2015-10-18 52 views
0

我以Ember開頭,並且想知道是否可以這樣做。EmberJs將模型名稱更改爲belongsTo屬性

我的一本書的服務器型號:

Book = { 
    name: 'string', 
    author_id: 'number' 
} 

但在我的灰燼身邊,我想有這樣的事情:

Book = { 
    name: DS.attr('string'), 
    author: DS.belongsTo('author' , {via: 'author_id'}) 
} 

這可能嗎?

回答

1

是的,這是可能的。你雖然沒有在關係上定義它,但是你在序列化器中實現了轉換行爲。因此,不要告訴Ember您的服務器將這種關係調用爲不同的東西,而只是將關係轉換爲Ember在加載到商店之前所需的格式。

例如,如果您使用RESTSerializer,則可以覆蓋keyForRelationship鉤子。

App.BookSerializer = DS.RESTSerializer.extend({ 
    keyForRelationship: function(key) { 
     if (key === 'author') { 
      return 'author_id'; 
     } else { 
      return key; 
     } 
    } 
}); 

這將告訴串行器獲取數據從author_id場在你的JSON的author關係。它還會確保在將JSON發送回服務器時,它在序列化時將author關係轉換回author_id屬性。

如果你沒有使用RESTSerializer,你可能在Ember Data API documentation page上找到你正在使用的序列化程序,你的序列化程序很可能有相同的方法或非常相似的方法。

+0

爲了完整起見,以下是ActiveModelAdapter是如何通用的:https://github.com/ember-data/active-model-adapter/blob/master/addon/active-model-serializer.js#L131-L140 – locks

+0

非常感謝,我使用了ActiveModelAdapter解決方案。 –