2014-09-23 33 views
2

我拉我的頭髮就這一個...ExtJS的5格店/視圖模型綁定:不能修改轉空店

我有一些網格,商店和視圖模型視圖。我需要不同網格中商店的不同過濾版本,所以我試圖將每個過濾的商店綁定到網格。現在,我甚至不能得到一個店擺在首位的網格加載...

這裏是我的代碼如下所示:

商店:

Ext.define('My.store.Admin.Kinder', { 
    extend: 'Ext.data.Store', 
    model: 'My.model.Kind', 
    storeId: 'adminKinderStore', 
    alias: 'store.adminKinder', 
    proxy: { 
     type: 'ajax', 
     method: 'post', 
     url: '/getKinder', 
     reader: { 
      type: 'json', 
      rootProperty: 'kinder' 
     } 
    } 
}); 

視圖模型:

Ext.define('My.model.kindViewModel', { 
    extend: 'Ext.app.ViewModel', 
    alias: 'viewmodel.kindViewModel', 
    requires: [ 
     'My.model.Kind', 
     'My.store.Admin.Kinder' 
    ], 
    view: 'kindView', 
    stores: { 
     warteliste: { 
      type: 'adminKinder' 
     } 
    } 
}); 

查看:

Ext.define('My.view.Admin.kinder', { 
    extend: 'Ext.panel.Panel', 
    alias: 'widget.kindView', 
    id: 'kinder-panel', 
    requires: [ 
     'My.view.Admin.kindController', 
     'My.model.kindViewModel' 
    ], 
    controller: 'kind', 
    border: false, 
    maxWidth: 960, 
    session: My.session, 
    viewModel: { 
     type: 'kindViewModel'  
    },  
    initComponent: function() { 
     this.activeTab = 'warteliste-tab'; 
     this.callParent(); 
    }, 
    items: [ 
    { 
     xtype: 'grid', 
     id: 'warteliste-grid', 
     bind: { 
      store: '{warteliste}' 
     },    
     border: false, 
     margin: '0 0 20px 0', 
     selModel: { 
      allowDeselect: true 
     }, 
     columns: [ 
      // some grid columns 
     ], 
     listeners: { 
      afterRender: function(grid) { 
       grid.store.load(); 
      } 
     } 
    }] 
}); 

我得到一個錯誤信息「無法修改轉空店」,這必然意味着這家店是不是當store.load()被調用的一個AfterRender監聽器(還)的約束。 奇怪的是,當我console.log網格,商店在那裏。當我console.log grid.store時,返回一個空的商店。

回答

10

我得到了一個AfterRender事件同樣的問題,並通過不從電網中獲取商店像

grid.store.load(); 

但是從視圖模型解決了它(視圖控制器範圍):對我來說

this.getViewModel().getStore('{warteliste}').load(); 
+0

這就是它!謝謝。 – choppingblock 2014-11-27 14:07:56

+1

它的作品在getStore中沒有'{}'。 ()。getStore('warteliste')。load(); – lamasgergo 2015-05-27 21:19:19

1

檢查商店是否按預期在viewmodel中創建。通常,我們在./store目錄中沒有商店定義文件,但我們將它們的配置置於viewmodel中。

看到這裏的一個例子:http://extjs.eu/ext-examples/#bind-grid-form - MainModel::stores

你原來的問題的解決方案

我需要商店的不同過濾版本在不同的網格

的連鎖門店。

查看如何在這裏實現他們的例子:http://extjs.eu/on-chained-stores/

+0

這個問題似乎是加載順序...如果我使用 店:{ warteliste:{ 類型: 'adminKi​​nder', 自動加載:真 }} ,並跳過一個AfterRender功能,它的工作原理。鏈式商店也適用。 – choppingblock 2014-09-25 07:50:38

-1

myGrid.getViewModel().getStore('myStoreName').load();