The main difference between the working (#1) and the not working (#2) version is that the working version creates itself the store before assigning it to the tree panel. If you'd like to rely on the framework to handle the store creation it is advised to use a ViewModel.
There are other issues: HelpStore should have a model that is extended from Ext.data.TreeModel and not Ext.data.Model, and also children part has to be removed from the store.
With the following modifications the #2 works as well.
Change HelpStore.js to this:
Ext.define('MDL.store.HelpStore', {
extend: 'Ext.data.TreeStore',
alias: 'store.HelpStore',
model: 'Ext.data.TreeModel',
root: {
expanded: true,
text: 'Should be replaced by Json',
},
proxy: {
type: 'ajax',
url: 'MDLHelp.json',
reader: {
}
}
});
Please note two changes here: the model is set to Ext.data.TreeModel (or you can extend an own model from this) and the children part is removed (otherwise it will override the contents and ignore the store).
Then change HelpTreePanel.js to use a ViewModel which will create the store as needed:
Ext.define('MDL.view.help.HelpTreePanel', {
extend: 'Ext.tree.Panel',
title: 'Help Topics',
xtype: 'HelpTreePanel',
rootVisible: true,
viewModel: {
stores: {
helpStore: {
type: 'HelpStore'
}
}
},
bind: {
store: '{helpStore}'
},
width: 250,
minWidth: 250,
maxWidth: 400,
listeners: {
itemclick: function (treeView, record, item, index, e, eOpts) {
document.querySelector("#helpContent-innerCt > p").innerHTML = record.data.html;
},
beforeload: function (store, operation, eOpts) {
console.log('Help Tree Panel BeforeLoad()');
},
load: function (dis, records, successful, operation, node, eOpts) {
console.log('Help Tree Panel Load()');
}
}
});
(According to best practices the ViewModel should be defined in a separate file but this code works as well for demonstration.)