2013-12-19 2 views
3

에 대한 onSelectedRowsChanged에 바인딩 잘못된 인스턴스를 얻을 나는 하나의 객체에 두 개의 slickGrids 가지고 : 그들 모두가 AJAX 요청에서받은 데이터로 가득여러 SlickGrid

instances: { 
    registered: { 
    selector: '##one', 
    slickGrid: null 
    }, 
    registeredPending: { 
    selector: '##two', 
    slickGrid: null 
    } 
} 

를 그리드가 생성됩니다

success: function(ajaxData) { 
    var data = []; 
    // ... parse ajaxData to data 

    //instance is either instances.registered or instances.registeredPending 
    instance.slickGrid = new Slick.Grid(instance.selector, data, grid.columns, grid.options); 
    instance.slickGrid.setSelectionModel(new Slick.RowSelectionModel({selectActiveRow: false})); 
    instance.slickGrid.registerPlugin(checkboxSelector) //Add checkbox plugin 
    instance.slickGrid.onSelectedRowsChanged.subscribe(function(e, data){ 
     //data.grid is last created slickGrid instance, instead of slickGrid of selected rows 
     //It seems data.rows are the selected rows of the right slickGrid table! 
    } 
} 

모든 것이 정상적으로 onSelectedRowsChanged 이벤트에 대한 구독 만 작동합니다. 이벤트는 잘 응답하지만 변경된 행의 인스턴스 대신 마지막으로 작성된 인스턴스를 리턴합니다.

편집

명확하게하기 위해, 두 인스턴스는 AJAX 이벤트의 succes에 콜백 이후에 만들어집니다. 따라서 제 경우에는 두 번의 호출이 이루어지며 둘 다 데이터를 반환합니다. 그 후에 그리드가 생성되어 데이터를 나타냅니다.

+0

나는 당신이 ObjectInstance가 아니라 ObjectType에 이벤트를 추가한다고 생각합니다. 함수를 한 번 정의하고 필요할 때마다 호출하려고합니다. 'Slick.Grid.onSelected.subscribe (function (e, data) {}); ' – EricG

+0

@ EricG : 문서 (https://github.com/mleibman/SlickGrid/wiki/Grid-Events)에 따르면, gridInstance를 구독하십시오. 모든 인스턴스가 자신의 범위에 있고 (그리고 자신의 바인딩을 듣는 것처럼) 내게 논리적 일 것입니다. –

+0

오케 나는 그것을 얻는다. 그런데 잘못된 인스턴스를 구독하지 않습니까? – EricG

답변

0

이 Google 그룹 페이지를 읽은 후 문제가 발견되었습니다 : https://groups.google.com/forum/#!topic/slickgrid/mKZzBxl2cVM.

두 인스턴스가 있었지만 둘 다 변수 checkboxSelector과 함께 Checkboxselectcolumn 플러그인을 등록했습니다. 결과는 서로 얽혀 있습니다.

알다시피, 쉽게 고정 할 수있었습니다. 인스턴스 당 변수 추가 :

instances: { 
    registered: { 
    selector: '##one', 
    slickGrid: null, 
    checkboxSelector: new Slick.CheckboxSelectColumn({ cssClass: "slick-cell-checkbox" }) 
    }, 
    registeredPending: { ... } 
} 

플러그인을 등록 할 때 해당 변수를 사용하십시오.

success: function(ajaxData) { 
    ... 
    instance.slickGrid.registerPlugin(instance.checkboxSelector) 
}