2013-12-14 118 views
-1

我得到了一個商店的消息,它工作正常。商店創建作品,商店定義不

現在我需要相同的商店,但有不同的初始化,所以我想重用它。

前:

Ext.create('Ext.data.JsonStore', { 
    model: 'my.MessageModel', 
    storeId: 'importantStore', 
    autoLoad: true, 
    proxy: { 
     type: 'ajax', 

     url: 'ajax/ajAsProof.php', 
     actionMethods: { 
      read: 'POST' 
     }, 
     reader: { 
      type: 'json', 
      root: 'messages', 
      idProperty: 'id' 
     }, 
     writer: { 
      type: 'json', 
      writeAllFields: true, 
      allowSingle: false, 
      encode: true, 
      root: 'messages' 
     } 
    }, 
    ... 
} 

Ext.define('my.MessagesGrid', { 
    extend: 'Ext.grid.Panel', 
    store: 'myGrid', 
    ... 
} 
Ext.create('my.MessageGrid', { 
    store:'importantStore', 
    renderTo: 'myGridId' 
}); 

後:

Ext.define('my.ImportantStore', { 
    extend: 'Ext.data.JsonStore', 
    model: 'my.MessageModel', 
    autoLoad: true, 
    proxy: { 
     type: 'ajax', 

     url: 'ajax/ajAsProof.php', 
     actionMethods: { 
      read: 'POST' 
     }, 
     reader: { 
      type: 'json', 
      root: 'messages', 
      idProperty: 'id' 
     }, 
     writer: { 
      type: 'json', 
      writeAllFields: true, 
      allowSingle: false, 
      encode: true, 
      root: 'messages' 
     } 
    }, 
    ... 
} 
Ext.define('my.MessagesGrid', { 
    extend: 'Ext.grid.Panel', 
    store: 'myGrid', 
    ... 
} 

var importantStore = Ext.create('my.ImportantStore', { 
    storeId: 'importantStore', 
    ... // my custom settings to come here, like filters or parameters 
}); 
Ext.create('my.MessageGrid', { 
    store:'importantStore', 
    renderTo: 'myGridId' 
}); 

這種失敗。 Firefox/Firebug給我一個

TypeError: url is undefined ext-all-debug.js (line 14429)

this.$cache = dom.id ? Ext.cache[dom.id] : null;

所有定義在Ext.ready()調用中的同一個js文件中。使用ExtJS 4.2.1.883。

有什麼不對?這樣做,使網格可重用的工作正常,但與商店失敗。

+0

1.你不應該聲明所有的js。 2.-您應該使用類似「MyApp.store.ImportantStore」的最佳問候 –

+0

這是一個小型項目,基本上只考慮使用同一商店的2或3個網格,但使用不同的過濾選項。網格定義&創建在同一個文件中工作得很好,商店不會。任何想法可能導致它? – Tseng

+1

即使只有幾個網格,我強烈建議您遵守Ext4 MVC –

回答

0

後找一個答覆我得到了解決,主要是由巧合...從C#背景的我不知道,自帶的ExtJS和JavaScript的prototypean恐怖的日子。

Ext.define('my.ImportantStore', { 
    extend: 'Ext.data.JsonStore', 
    model: 'my.MessageModel', 
    autoLoad: true, 
    constructor: function(config) { 
     config = config || {}; 

     this.initConfig(config); 
     this.proxy = Ext.create('Ext.data.proxy.Ajax', { 
      extraParams: config.extraParams 
      // other config 
     }); 
     ... 
     this.callParent(arguments); 
    } 
}); 

Ext.create('my.ImportantStore', { 
    storeId: 'importantStore', 
    extraParams: { 
     ... 
    } 
}); 

如果使用Ext.define代理(或用於此情況下的設置)時,不容器,內產生的組分(在這種情況下,代理)將所有實例以上共享,這是人們直覺他們熟悉OOP編程和類繼承,並且從未使用通過克隆工作的原型樣式繼承。

+0

@downvoter:謹慎解釋自己的downvote? – Tseng

0

"url is undefined"

您是否確實在商店中爲網址配置設置了一些價值?

Ext.define('my.ImportantStore', { 
    extend: 'Ext.data.JsonStore', 
    model: 'my.MessageModel', 
    autoLoad: true, 
    url: '../myServletOrRestService' // do you have this config ? 

    ... 
} 
+0

是的,配置在兩種情況下都完全相同。唯一的區別是,在定義時,我另外將'extend:'Ext.data.JsonStore','添加到配置中。更新後的帖子更清晰 – Tseng

+0

我看到了...... humm我會嘗試定義一些其他類,然後嘗試使用它,以確保您定義calsses的方式不是問題,而是該商店特定的問題。最好的祝福。 –