2014-02-17 2 views
0
var data = [{"Id":40072,"Id2":40071,"SmDetails":{"Id1":40071,"Id2":40072}}] 

Я хочу отобразить SmDetails.Id1 в столбце. Как это возможно? Я пробовал:Как сопоставить столбцы с сложным объектом в SlickGrid

var columns = [{name:'Personnel',field:SmDetails.id1,id:'detailId'}]; 

Пожалуйста, помогите мне Пожалуйста, помогите мне

**My latest code** 
     var data = [{"Id":40072,"Id2":40071,"allocationDetails":{"Id1":40071,"allocationDetails":{"accommodationId":4007}}}] 
    var grid; 
       var columns = [          {name:"Personnel",field:"allocationDetails",fieldIdx:'accommodationId', id:"accommodationId"}]; 
       var options = { 
        enableCellNavigation: true, 
        enableColumnReorder: false, 
        dataItemColumnValueExtractor: 
                   function getValue(item, column) { 
         var values = item[column.field];        
         if (column.fieldIdx !== undefined) { 
       return values && values[column.fieldIdx]; 
       } else { 
       return values; 
       }}}; 
       var gridData=$scope.Vo;//This return as json format       
       grid = new Slick.Grid("#testGrid",gridData, columns); 
    This is the code tried recently. 
+0

попробуйте 'SmDetails.Id1' (i находится в верхнем регистре) –

+0

Да, я пробовал то же самое. Но он не работал. – user3319065

ответ

0

Вы должны будете предоставить custom value extractor сказать сетку, как читать ваш объект.

var options = { 
    enableCellNavigation: true, 
    enableColumnReorder: false, 
    dataItemColumnValueExtractor: 
    // Get the item column value using a custom 'fieldIdx' column param 
    function getValue(item, column) { 
    var values = item[column.field]; 
    if (column.fieldIdx !== undefined) { 
     return values && values[column.fieldIdx]; 
    } else { 
     return values; 
    } 
    } 
}; 

Определения столбцов будет выглядеть следующим образом:

{ 
    id: "field1", 
    name: "Id1", 
    field: "SmDetails", 
    fieldIdx: 'Id1' 
}, { 
    id: "field2", 
    name: "Id2", 
    field: "SmDetails", 
    fieldIdx: 'Id2' 
} //... etc 

Выезд this fiddle для рабочего примера.

+0

Я пробовал это в своем приложении. Но значение отображалось как [object Object]. – user3319065

+0

Добавьте свой последний код в конец оригинального сообщения, чтобы я мог видеть, как вы его настроили. – Origineil

+0

Пожалуйста, проверьте последние добавленные комментарии – user3319065

0

попробовать это, чтобы преобразовать data в объект значений одинарной длины ...

newData = {}; 
for(key in data[0]){ 
    parentKey = key; 
    if(typeof(data[0][key]) == "object"){ 
     childData = data[0][key]; 
     for(key in childData){ 
      childKey = key; 
      newKey = parentKey+childKey; 
      newData[newKey] = childData[childKey]; 
     } 
    } else { 
     newData[key] = data[0][key]; 
     } 
} 

Это превратит ваш data объект как этот

newData = {Id: 40072, Id2: 40071, SmDetailsId1: 40071, SmDetailsId2: 40072}; 

Теперь использовать эту newData, чтобы сопоставить элементы данных в сетке

-1

Я нахожу, что это хорошо работает для вложенных свойств, например:

var columns = [ 
    { id: "someId", name: "Col Name", field: "myRowData.myObj.myProp", width: 40} 
.. 
]; 

var options { 
... 
dataItemColumnValueExtractor: function getItemColumnValue(item, column) { 
    var val = undefined; 
    try { 
     val = eval("item." + column.field); 
    } catch(e) { 
     // ignore 
    } 
    return val; 
    } 
}; 
+1

-1 для использования 'eval' –