Поскольку этот thread кажется ужасно устаревшим, позвольте мне задать аналогичный вопрос. Итак, у меня есть store
определяется следующим образом:ExtJS. Загрузите магазин на рендере
Ext.define('GeoServer.store.ObjectsStore', {
extend: 'Ext.data.TreeStore',
requires: ['GeoServer.model.ObjectsModel'],
model: 'GeoServer.model.ObjectsModel',
autoLoad: false,
proxy: {
type: 'ajax',
url: 'controller/MapsHandler.php',
extraParams: {
action: 'listObjects'
}
}
});
Как вы можете видеть, он имеет autoLoad
набор для false
. Это потому, что я не хочу загружать десятки магазинов при загрузке страницы, я только хочу их загрузить, когда мне это нужно. Например, в этом случае мне нужно загрузить этот магазин, когда я покажу окно с treepanel
внутри. Как я показывать это окно является:
Ext.create("Ext.window.Window",{
title: "Objects",
height: size.height,
width: size.width,
constrainHeader:true,
layout:"fit",
maximizable:true,
items:[{
xtype: 'treepanel',
rootVisible: false,
scrollable: true,
itemId: 'Objects',
store: 'ObjectsStore',
border: false,
autoLoad: true // has no effect
}]
}).show();
Но противная вещь, что когда окно появляется в первый раз, то дерево не получает заполняется данными, даже если я вижу запрос, что сервер запущен. Однако, когда окна появляются на второе, третье и т. Д. Время, все в порядке. Итак, что такого особенного в первый раз и как правильно использовать это свойство autoLoad
?
Обычно я загружаю магазины в событие «boxready», используя метод store.load. Таким образом, вы также можете подключить обратный вызов для вызова при загрузке магазина. –
, потому что вы назначаете автозагрузку для элемента (treepanel), а не в хранилище. Вместо этого используйте функцию load(). –
@Adrian, я попробовал как события «render», так и 'afterrender', такие как:' listeners: {render: function() {this.store.load()}} ', но в этом случае я получаю некоторую ошибку библиотеки" 'r 'undefined" и снова в первый раз, когда дерево не заполнено – Jacobian