2013-02-04 71 views
3

我有以下情況。我有一個與我的服務器同步的TreeStore。服務器響應以附加屬性'additionalTask​​s'(它爲新節點存儲一些服務器生成的信息)返回修改的節點數據。如果所有商店的偵聽器都已獲得實例化的記錄對象而不是原始響應數據,那麼如何獲取此屬性的值?我已經嘗試將這個額外的字段添加到我的模型中,但是當我檢查它在偵聽器函數中的記錄值時,它們顯示爲空。如何在同步存儲後讀取其他響應數據

Ext.define('ExtendedTask', { 
     extend: 'Ext.data.NodeInterface', 
     fields: [ 
      { name : 'additionalData', type : 'auto', defaultValue : null, persist : false} 
     ] 
    }); 

var store = Ext.create("Ext.data.TreeStore", { 
    model : 'ExtendedTask', 
    autoSync: false, 
    proxy : { 
     method: 'GET', 
     type : 'ajax', 
     api: { 
      read : 'tasks.js', 
      update : 'update.php', 
      create : 'update.php' 
     }, 
     reader : { 
      type : 'json' 
     } 
    }, 
    listeners: { 
     update : function(){ 
      console.log('arguments: ', arguments); 
     } 
    } 
}); 

這是我update.php響應:

<?php 
echo '[ { "Id" : 1,'. 
    '"Name" : "Planning Updated",'. 
    '"expanded" : true,'. 
    '"additionalData": ['. 
    ' {'. 
    '  "Name" : "T100",'. 
    '  "parentId" : null'. 
    ' }'. 
    ']'. 
']'; 
?> 

回答

0

我面臨着同樣的問題。我最終必須做的是使用標準的樹模型屬性(我使用cls)來嘗試加載到模型中的任何自定義數據。我可能是錯的,但從我看待這個問題時,似乎extjs強制樹模型只使用標準字段。他們指出:

如果沒有指定模型,將創建一個實現Ext.data.NodeInterface的隱式模型。標準樹字段也將被複制到模型上以保持其狀態。這些字段列在Ext.data.NodeInterface文檔中。

但是從測試看來,只有標準字段可用,不管是否指定了模型。只有我能找到的解決方法是使用標準的字符串類型字段,我不需要像cls,但我很想看看有沒有人找到更好的方法。

http://docs.sencha.com/ext-js/4-1/#!/api/Ext.data.TreeStore

+0

我猜這個問題不一樣。從服務器發送的數據對保存在商店中的數據沒有影響。這就是爲什麼不管你分配什麼價值觀,反正他們都會被忽視。 wtf sencha –

1

這家店的代理總是不斷地從最近的請求的原始響應。嘗試這樣的事情,看看你需要的信息是否存在。

update : function(){ 
    console.log(this.proxy.reader.rawData); 
} 
+0

沒有。這存儲了執行第一個「讀取」操作時獲取的數據。這真的是愚蠢的imho。 –

相關問題