2015-01-08 58 views
0

在我的網格中,我配置了jsonReader「id」屬性來獲取我的數據庫記錄作爲行ID。 像這樣:jqGrid - 將數據庫記錄嵌套屬性設置爲行ID

JSON

{ 
    id: 1, 
    price: 99.99, 
    data: { 
     dataId: 2 
    } 
} 

JSON READER

... 
jsonReader: { 
    root: 'list', 
    total: 'count', 
    id: 'id' 
}, 
... 

如果我要設置 「數據ID」 作爲行ID?我試圖通過在字符串中使用點符號來定義它,但它不起作用。這裏是我的網格選項:

var gridOptions = { 
    height: 250,     
    colNames: ['Nome', 'Preço'], 
    colModel: [{ 
     name:'ipvodAsset.title', 
     index:'ipvodAsset.title', 
     width: 200, 
     sorttype:'string', 
     searchoptions: { sopt:['eq','ne','lt','le','gt','ge','bw','bn','in','ni','ew','en','cn','nc'] } 
    }, { 
     name:'price', 
     index:'price', 
     width:200, 
     sorttype:'currency', 
     formatter: 'currency', 
     searchoptions: { sopt:['eq','ne','gt','ge','bw','bn','cn','nc'] } 
    }], 
    jsonReader: { id: 'data.data.id' }, 
    prmNames: {'order': 'order'}, 
    gridView: true, 
    sortorder: 'asc', 
    sortname: 'title', 
    viewrecords : true, 
    rowNum: 10, 
    rowList:[10,20,30], 
    altRows: true, 
    dataType="local", 
    data = [ 
     { "id": 1, "price": 99.99, "data": { "dataId": 2 } }, 
     { "id": 2, "price": 99.99, "data": { "dataId": 3 } }, 
     { "id": 3, "price": 99.99, "data": { "dataId": 4 } }, 
     { "id": 4, "price": 99.99, "data": { "dataId": 5 } } 
    ] 
}; 
+1

的jqGrid可用於在網格中顯示數據項的數組。是「JSON」你發佈的是一項數據,你有像'id'和'price'這樣的列,並且想使用'data.dataId'作爲rowid?你在'jsonReader'中包含'root:'list'',這樣數據就更復雜了。此外,「JSON」數據包含未引用的屬性名稱('id','price' ...而不是'「id」','「price」'...)。你真的從服務器上每Ajax加載這樣的數據,或者你只是使用'datatype:「local」'並且想用表單中的'data'參數填充網格?請修復您的問題的文字。 – Oleg

+0

@Oleg對不起,「jsonReader」中的「root」不應該在那裏。我更新了問題,我的網格選項現在在那裏。你能看看嗎? – darksoulsong

回答

1

首先我應該提到的是,JSON和對象初始化之間存在很大的差異。語法

var data = [ 
    { "id": 1, "price": 99.99, "data": { "dataId": 2 } }, 
    { "id": 2, "price": 99.99, "data": { "dataId": 3 } }, 
    { "id": 3, "price": 99.99, "data": { "dataId": 4 } }, 
    { "id": 4, "price": 99.99, "data": { "dataId": 5 } } 
]; 

聲明變量data並初始化它。變量data的類型爲object。因爲所有屬性idpricedata的名稱不包含空格,圓點和其他特殊字符可以把上面的代碼一樣

var data = [ 
    { id: 1, price: 99.99, data: { dataId: 2 } }, 
    { id: 2, price: 99.99, data: { dataId: 3 } }, 
    { id: 3, price: 99.99, data: { dataId: 4 } }, 
    { id: 4, price: 99.99, data: { dataId: 5 } } 
]; 

另一個建設

var myJsonString = '[ { "id": 1, "price": 99.99, "data": { "dataId": 2 } }, { "id": 2, "price": 99.99, "data": { "dataId": 3 } }, { "id": 3, "price": 99.99, "data": { "dataId": 4 } }, { "id": 4, "price": 99.99, "data": { "dataId": 5 } } ]'; 

聲明和初始化的變量myJsonString類型string(!!!)。人們可以使用jQuery.parseJSONJSON.parse或者甚至使用JavaScript的eval函數輕鬆地將字符串myJsonString轉換爲對象data

因此,用於初始化myJsonString右側的字符串是JSON字符串,但不是第一個示例中的初始化程序。

您發佈的代碼如dataType="local"而不是datatype: "local"gridView: true而不是gridview: true。例如,如果使用dataType: "local"而不是datatype: "local",則該選項將被忽略,並且將使用默認的"xml"datatype。這不會是你需要的。

不過,問題仍然存在:ho讀取這樣的數據並從data.dataId分配rowid值。

因爲你使用datatype: "local"一個需要使用localReader代替jsonReader:中

localReader: { id: "data.dataId" } 

代替

jsonReader: { id: 'data.data.id' } 
在你的代碼中使用

相應的演示是here。它顯示

enter image description here

你可以很容易驗證(使用Chrome,Internet Explorer或Firefox的開發者工具),網格的的rowid是2,3,4,5和1,2,3,4不:

enter image description here

+0

在我的問題中有一些拼寫錯誤,這就是爲什麼「=」應用於「:」的原因。感謝您指出了這一點。「dataType」也是如此,我會解決這個問題。 localReader做了竅門。非常感謝你!! – darksoulsong

+0

@darksoulsong:不客氣! – Oleg