2017-05-23 50 views
2

這個問題與Trying to bind a store to a ViewModel有關,但是是一個不同的問題。爲什麼沒有在ViewModel中聲明的商店被加載?

我聲明瞭一個存放在視圖模型是這樣的:

Ext.define('Mb.view.rma.DetailsModel', { 
    extend: 'Ext.app.ViewModel', 
    alias: 'viewmodel.rma-details', 
    requires: ['Mb.model.rma.Detail'], 
    data: { 
     id: 0 
    }, 
    stores:{ 
     details: { 
      //store: 'rma.Details', 
      type: 'rmaDetails', // correction as suggested by @scebotari 
      filters: [{ 
       property: 'rma', 
       value: '{id}' 
      }], 
      remoteFilter: true 
     } 
    } 
}); 

當我實例化視圖中,值id在視圖模型正確更新(我可以看到這一點,因爲視圖反映它通過結合標題):

Ext.define('Mb.view.rma.Details', { 
    extend: 'Ext.grid.Panel', 
    requires: [ 
     'Mb.view.rma.DetailsModel' 
    ], 
    viewModel: { 
     type: 'rma-details' 
    }, 
    bind: { 
     title: 'Retour n° {id}', 
     store: '{details}' 
    }, 

我現在面臨的問題是,實體店不會被加載,即使是remoteFilter: true屬性在視圖模型(在店裏類而不是視圖模型不設置remoteFilter: true不改變行爲)。

要完成的代碼,這裏是商店(沒有什麼特別):

Ext.define('Mb.store.rma.Details', { 
    extend: 'Ext.data.Store', 
    model: 'Mb.model.rma.Detail', 
    alias: 'rmaDetails', // correction as suggested by @scebotari 
    proxy: { 
     (...) 
    }, 
    remoteFilter: true 
}); 

主要問題:爲什麼不店裏得到加載?

子公司問題:看起來像一個頻繁的問題顯示一個細節網格,例如發票的行。我不確定我正在嘗試的是使用MVVM爲這個問題推薦的方法。 MVVM似乎比MVC更好,因爲它可以一次打開多個細節實例。我沒有找到這個案例的例子。有沒有推薦的方法來解決這個問題?

備註:

過濾器得到應用,因​​爲它應該。

店鋪{details}似乎不是一個連鎖店。實際上,在視圖模型中將store: 'rma.Details'更改爲source: 'rma.Details'時,它變成了連鎖商店。

+0

你有什麼問題嗎? –

+0

@LudovicFeltz我仍然在寫問題,在這裏,對不完整的問題抱歉 –

+0

好吧我刪除我的downvote –

回答

2

據我所知,這不是你如何使用視圖模型中單獨類中聲明的商店。

申報時要在一個視圖模型使用一個商店,你應該指定「別名」的配置,像這樣:

Ext.define('Mb.store.rma.Details', { 
    extend: 'Ext.data.Store', 
    model: 'Mb.model.rma.Detail', 
    alias: 'store.rmaDetails', 
    proxy: { 
     (...) 
    } 
}); 

然後在「類型」店使用此別名在視圖模型配置:

stores:{ 
    details: { 
     type: 'rmaDetails', 
     filters: [{ 
      property: 'rma', 
      value: '{id}' 
     }], 
     remoteFilter: true, 
     autoLoad: true 
    } 
} 

我不知道爲什麼這還沒有記錄。也許是因爲此功能稍後添加(https://www.sencha.com/forum/showthread.php?284012-Use-existing-Store-in-ViewModel)。

當設置爲autoLoad: true時,數據將自動加載。視圖模型中的商店配置擴展了商店類store.rmaDetails。每個視圖實例都有自己的商店實例關聯(這是不同的默認實例.getStore('rma.Details')

+0

謝謝,這是非常有趣的信息,但它並沒有解決商店沒有加載的問題,要加載它,我現在必須在控制檯中執行:'grid.getStore()。負載()'。 –

+0

當我用我的方式綁定商店時,代理服務器是'type:'memory''。你的方式,代理是正確的(原始商店相同)。 –

+0

非常感謝您提供了有用的答案,幫助我解決了一個問題。儘管如此,我不能將其標記爲已接受,因爲它不能解決主要問題。 –