2013-02-27 52 views
2

的json數據是這樣的:ExtJS的4:拿到店裏記錄值

({"success": "true", "message" : "OK","data":[{"id_metric":"1","name_filter":"doc filter","type_guicomp":"combobox"},{"id_metric":"1","name_filter":"severity","type_guicomp":"combobox"}]}) 

我希望能夠找回了"id_metric" = 1"type_guicomp"字段值,那麼結果將是:"type_guicomp":"combobox""type_guicomp":"combobox"

我這樣做是因爲我需要值"combobox"將它分配給一個變量。 我已經試過幾件事情包括:

myStore.load({ 
     scope: this, 
     callback : function(record, operation, success) { 
      console.log(record); 
      console.log(record.data); 
      } 

和:

var index = Ext.StoreMgr.lookup("myStore").findExact('id_metric',1); 
var rec = Ext.StoreMgr.lookup("myStore").getAt(index); 
console.log(rec); 

這些解決方案返回未定義或爲空。 所以,當我在回調做:

var i = myStore.getCount(); 
console.log(i); 

它返回0。但是,當我檢查JSON輸出時,它不是空的,而且實際上有數據。

我在做什麼錯?請任何幫助,將不勝感激。

編輯

我的店看起來是這樣的:

Ext.define('Metrics.store.MyStore', { 
extend: 'Ext.data.Store', 
model: 'Metrics.model.MyModel', 
autoLoad: true, 
idProperty: 'id_metric', 
proxy : { 
    type : 'ajax', 
    actionMethods : 'POST', 
    node : 'id_metric', 
    api : { 
    read : 'gui_comp_items.php' //the php script that gets data from db 
    }, 
    reader: { 
     type: 'json', 
     successProperty: 'success', 
     messageProperty: 'message', 
     root: 'data' 
    } 
} 
}); 

我的模型:

Ext.define('Metrics.model.MyModel', { 
extend: 'Ext.data.Model', 
fields: [ 
{name : 'id_metric', type : 'int'}, 
{name : 'name_filter', type : 'string'}, 
{name : 'type_guicomp', type : 'string'}, 
{name : 'value', type : 'string'}] 
}); 
+1

你的商店和模型配置是什麼樣的? – Geronimo 2013-02-27 17:25:52

+0

我已將它們添加到我的帖子中。 – salamey 2013-02-28 08:36:18

+1

據我記得,idProperty不是商店的屬性,但模型的所以考慮移動它,並與您返回兩個id_metric具有相同的值,所以它似乎並不唯一。此外,您可以縮短代碼'Ext.getStore('MyStore')。findRecord('id_metric',1)'。如果沒有像解碼問題那樣的錯誤,請用螢火蟲等方法仔細檢查響應。現在,嘗試在加載回調函數中轉儲數據,因爲在加載之前您可能會檢索它們。 – 2013-02-28 09:26:15

回答

1

什麼,我不明白的是你已經使用myStore的方式。你已經將它同時用作字符串和變量。這是什麼?如果它的字符串,然後myStore.load()將無法​​正常工作。如果它是一個變量,則需要在Ext.StoreMgr.lookup(myStore)上丟失引號。存儲變量在哪裏被聲明?

+0

我已經聲明: 'var myStore = this.getMyStore();' – salamey 2013-02-28 09:48:01

+0

您是否使用Ext.create創建了商店和模型?根據我的理解,這些只是定義,您需要在定義後創建它們。 – Aashray 2013-02-28 09:54:35

+1

我正在使用Extjs 4 MVC體系結構,存儲和模型被定義,然後由控制器使用。我不認爲這是問題。 – salamey 2013-02-28 10:04:52

0

如果您使用ajax請求,您可以獲得id_metric ...只是看看成功功能。

Ext.Ajax.request({ 
    url : 'blabla.tml', 
    method:POST,                  
    params : { 
     item : Data 
    }, 
    success : function(response) { 
     var res = response.responseText;                   
     alert(Ext.decode(res)); 
     var jsonData = Ext.decode(res); 
     var data = jsonData.data; // here data will contain ur data with root data.  

您可以加載此數據現在

Ext.getStore('Mystore').loadData(data);            
    } 
}); 

而你正在使用的MyStore加載...是你的MyStore的STOREID:的MyStore, 只是看看它一次。

0

很可能是因爲擁有2個具有相同ID的對象而使商店混淆。 (您的JSON代碼顯示「id_metric」:「1」兩次)。

然而,最有可能的是,自動轉換爲模型失敗。 嘗試這樣做:

var model = Ext.create("Metrics.model.MyModel", {"id_metric":"1","name_filter":"doc filter","type_guicomp":"combobox"}); 

看什麼型號的樣子,如果它能夠創建一個實例。

如果可行(因此您可以創建模型),請在商店中查看數據是否實際存在。 尋找此:

myStore.proxy.reader.jsonData 

此外,如在評論中指出,該idProperty是一個模型屬性,你應該在你的模型申報。