2011-08-17 3 views
2

웹에서 모든 것을 둘러 보았습니다. 그러나 Est Js 4 모델에서 many to many 연관을 구현하는 방법을 찾지 못하는 것 같습니다. 프로토 타입 예제를 가져옵니다. "게시물"과 "태그"가있는 응용 프로그램이 있습니다. Ext Js 4 모델에서이를 어떻게 표현하고 태그로 게시물과 게시물별로 태그를 필터링합니까?Ext Js 4에서 ManyToMany 연관 구현

+1

나는 정말 당신이 그들의 연관 구성 요소로 그렇게하려고 시도하지 않는다고 제안한다. 많은 사람들은 당신이 상점 간 관계를 저장할 추가 데이터를 가지고 있다고 제안한다. 나는 당신이 2 점포를 서로 연관 짓는 자신의 가게 posts2tags를 만들고 자신을 필터로 처리 할 것을 제안한다. 지금까지 연관 구성 요소를 사용했다면 아마 각 레코드 내에 상점이 생성 된 것을 보았을 것입니다. 연결 구성 요소를 사용하면 중복 데이터로 연결됩니다. – nscrob

답변

4

ManyToMany는 A와 B 사이에 링크가 포함 된 추가 테이블 (또는 배열)이 있음을 의미합니다. 따라서이 방법을 구현하는 유일한 방법은 추가 저장소를 사용하는 것입니다. 많은 항목이 각각 여러 범주에 속할 수 있습니다 경우

, 여기에 모델 정의입니다 : 다음

Item.categories().load({ 
    scope: this, 
    callback: function(aRecords, aOperation, aSuccess) { 

     Ext.each(aRecords, function(aAssociation) { 
      // Do something here 
     }, this); 

    }     
}); 

: 다음

Ext.define('BS.model.Item', { 
    extend: 'Ext.data.Model', 
    fields: [ 
     {name: 'name'     , type: 'string'}, 
    ], 

    proxy: { 
     type: 'direct', 

     api: { 
      create: Items.Create, 
      read: Items.GetTree, 
      update: Items.Update, 
      destroy: Items.Delete, 
     }, 
    }, 

    hasMany: {model: 'BS.model.ItemInCategory', name: 'categories', foreignKey: 'itemId'}, 
}); 

Ext.define('BS.model.ItemCategory', { 
    extend: 'Ext.data.Model', 
    fields: [ 
     {name: 'name'  , type: 'string'}, 
    ], 

    proxy: { 
     type: 'direct', 

     api: { 
      create: ItemCategories.Create, 
      read: ItemCategories.Read, 
      update: ItemCategories.Update, 
      destroy: ItemCategories.Delete, 
     }, 
    }, 

}); 

Ext.define('BS.model.ItemInCategory', { 
    extend: 'Ext.data.Model', 
    fields: ['itemId', 'categoryId'], 

    // This will allow create operations with multiple records 
    clientIdProperty: 'clientId', 

    proxy: { 
     type: 'direct', 

     api: { 
      create: ItemInCategory.Create, 
      read: ItemInCategory.Read, 
      destroy: ItemInCategory.Destroy, 
     }, 

     reader: { 
      type: 'json', 
      root: 'data', 
     },   
    }, 

}); 

이 항목에 속한 모든 범주를 얻을 수 연결을 추가하는 방법 :

var iNewRecord = Item.categories().model.create({ categoryId: '16' }); 

Item.categories().add(iNewRecord); 
+0

이것은 아주 좋은 해결책입니다. 나는 친숙한 대답을 줄 것이다. – acteon

0

ManyToMany 너무 구현됩니다.

최소 구현 :

Ext.define('App.models.Group', { 
extend: 'Ext.data.Model', 

manyToMany: [ 
    'User' 
] 

});