2013-04-18 2 views
1

Ember 데이터 소스 코드를 통해 주석 처리 된 후크를 사용하려고하지만 호출 된 방식으로 구현할 수 없습니다.Ember Data가 제공하는 후크를 사용하는 방법

나는 현재 A hook you can use in your serializer subclass to customize how a polymorphic association's name is converted into a key for the type.입니다 DS.JSONSerializer에 후크, 인 keyForPolyMorphicType를 사용하려고 여기에 내가 현재 누군가가 후크를 사용하는 방법에 대한 지침을 제공 할 수있는 경우가

var jsonSerializer = DS.JSONSerializer.extend({ 
    keyForPolymorphicType: function(name) { 
    debugger 
    } 
}) 
var serializer = jsonSerializer.create() 

DS.RESTAdapter.configure('ServerDemo.Component', { 
    alias: 'component' 
}); 

ServerDemo.Adapter = DS.RESTAdapter.extend({ 
    bulkCommit: false 
    ,serializer: serializer 
}); 


ServerDemo.Store = DS.Store.extend({ 
    revision: 12, 
    adapter: ServerDemo.Adapter.create() 
}); 

을 설정하는 방법입니다입니다 소스 전체에 뿌리고, 그 도움이 될 것입니다

여기에 편집

내 모델입니다

,536,
ServerDemo.Note = DS.Model.extend 
    title: DS.attr 'string' 
    content: DS.attr 'string' 
    index: DS.attr 'number' 
    noteable: DS.belongsTo 'ServerDemo.Noteable' 

ServerDemo.Noteable = DS.Model.extend 
    note_ids: DS.hasMany 'ServerDemo.Note' 

ServerDemo.Part = ServerDemo.Noteable.extend 
    rack_pos: DS.attr 'number' 
    server_config_id: DS.belongsTo 'ServerDemo.ServerConfig' 
    partable: DS.belongsTo 'ServerDemo.Partable', { polymorphic: true } 
    note_ids: DS.hasMany 'ServerDemo.Note' 
    semanticRackPos: (-> 
    "rack_pos_#{this.get('rack_pos')}" 
).property('rack_pos') 

ServerDemo.Partable = DS.Model.extend 
    part_ids: DS.hasMany 'ServerDemo.Part' 

ServerDemo.Component = ServerDemo.Partable.extend 
    back_image: DS.attr 'string' 
    cols: DS.attr 'number' 
    rows: DS.attr 'number' 
    front_image: DS.attr 'string' 
    name: DS.attr 'string' 

답변

1

당신은 올바른 길을 가고 있습니다. DS.JSONSerializer 대신 DS.RESTSerializer을 상속하는 것이 좋습니다.

내 생각 엔 다형성 연결을 올바르게 구현하지 않는 모델에 대해 코드를 테스트하고있는 것 같습니다. 당신이 가게, 어댑터, 시리얼 라이저와 모델을 설정하는 방법을 볼 수 있습니다 https://github.com/emberjs/data/blob/master/packages/ember-data/tests/integration/belongs_to_test.js#L119

파일의 맨 위에 :

이 테스트를 살펴 보자.

업데이트 (모델 설명 후).

주목해야 할 것은 REST 직렬 변환기의 속성 인 camelize/decamelize입니다. 당신은 그것을하지 않습니다. (server_config_id ->serverConfig) 협회에 대한

속성 모델, json으로의 ID를하지 않는 속성을 설명하는 이름이 (note_ids ->notes를)

당신은 그런 식으로 작업하는 것이 수 :

ServerDemo.Note = DS.Model.extend 
    title: DS.attr 'string' 
    content: DS.attr 'string' 
    index: DS.attr 'number' 
    noteable: DS.belongsTo 'ServerDemo.Noteable', {polymorphic: true} 

ServerDemo.Noteable = DS.Model.extend 
    notes: DS.hasMany 'ServerDemo.Note' 

ServerDemo.Part = ServerDemo.Noteable.extend 
    rack_pos: DS.attr 'number' 
    serverConfig: DS.belongsTo 'ServerDemo.ServerConfig' 
    partable: DS.belongsTo 'ServerDemo.Partable', {polymorphic: true} 
    semanticRackPos: (-> 
    "rack_pos_#{this.get('rack_pos')}" 
).property('rack_pos') 

ServerDemo.Partable = DS.Model.extend 
    parts: DS.hasMany 'ServerDemo.Part' 

ServerDemo.Component = ServerDemo.Partable.extend 
    back_image: DS.attr 'string' 
    cols: DS.attr 'number' 
    rows: DS.attr 'number' 
    front_image: DS.attr 'string' 
    name: DS.attr 'string' 

현재 다형성 연관이 필요하지 않으므로이 디자인을 찾고 계신지 확실하지 않습니다. 정의한 모델의 수를 줄일 수 있습니다.

+0

시릴, 정말 고마워. 나는 어떤 serializer를 사용해야하는지 잘 모르겠다. 나는 당신의 커밋에있는 예제를 따라 왔고, JSONSerializer를 사용한다고 언급했지만 아마도 그것을 사용하지 않는다. 나는 하나의 다형성 assoc을 가지고 있는데, 그것은 내가 추가하는 두 번째 것만이 나에게 문제가되는 것이다. 별칭을 어떻게 설정해야하는지에 대한 오류가 표시됩니다. 설정 한 경우 이미 설정되어 있다고 표시됩니다. 결국 가져올 것입니다. 작업에 감사 드리며 모든 사람에게 응답하는 데 걸리는 시간 – Lsdafjklsd

+0

기꺼이 모델을 게시하고 별칭을 선언하는 방법에 대해 기꺼이 도와 드리겠습니다. –

+0

니스! 나는 모델을 추가했고 나의 별칭은 원래 게시물에 올라 있으며 단지 'part' 앨리어스를 선언 할 때'part' 앨리어스가 이미 선언 되었기 때문에 하나만 가지고있다. 또한 모든 것이 코드의 컴포넌트/파티셔블 측면에서 작동한다는 것을 추가해야합니다 ... 그것은 연관에서 유형 '부분'을 얻을 수없는 노트와 노트입니다. 페이로드가 표준 사이드 로딩되도록 ActiveModelSerializers도 사용하고 있습니다. 감사! – Lsdafjklsd

관련 문제