store.loadData 是否会在 ExtJs 4.2.5 的商店中触发加载事件?
Does store.loadData fires load event on the store on ExtJs 4.2.5?
store.loadData 会在 ExtJs 4.2.5 的商店上触发加载事件吗?
文档说明它确实如此:http://docs-devel.sencha.com/extjs/4.2.5/#!/api/Ext.data.Store-method-loadData
但鉴于我所经历的,它看起来并不像它,并且还查看了源代码:
loadData: function(data, append) {
var length = data.length,
newData = [],
i;
//make sure each data element is an Ext.data.Model instance
for (i = 0; i < length; i++) {
newData.push(this.createModel(data[i]));
}
this.loadRecords(newData, append ? this.addRecordsOptions : undefined);
},
好的,loadRecords 可能正在触发它吧?
loadRecords: function(records, options) {
var me = this,
i = 0,
length = records.length,
start,
addRecords,
snapshot = me.snapshot;
if (options) {
start = options.start;
addRecords = options.addRecords;
}
if (!addRecords) {
delete me.snapshot;
me.clearData(true);
} else if (snapshot) {
snapshot.addAll(records);
}
me.data.addAll(records);
if (start !== undefined) {
for (; i < length; i++) {
records[i].index = start + i;
records[i].join(me);
}
} else {
for (; i < length; i++) {
records[i].join(me);
}
}
/*
* this rather inelegant suspension and resumption of events is required because both the filter and sort functions
* fire an additional datachanged event, which is not wanted. Ideally we would do this a different way. The first
* datachanged event is fired by the call to this.add, above.
*/
me.suspendEvents();
if (me.filterOnLoad && !me.remoteFilter) {
me.filter();
}
if (me.sortOnLoad && !me.remoteSort) {
me.sort();
}
me.resumeEvents();
if (me.isGrouped()) {
me.constructGroups();
}
me.fireEvent('datachanged', me);
me.fireEvent('refresh', me);
},
那里也没有发射。
这是一个已知问题还是我遗漏了什么?
loadData
不会触发 load
事件,因为只要存储从 remote 数据源读取数据,就会触发 load
事件(docs)。 loadData
使用第一个参数中提供的 local 数据。
您发现文档中存在错误。我在 4.1.1 版中关注了您的研究,但我找不到 loadData
在那里触发 load
事件。
然而 loadRawData
曾在 4.1.1 中触发 load
事件,但在 4.2.5 中不再触发。在 source code 你可以阅读:
从 4.2 开始,此 (loadRawData) 方法将不再触发 {@link #event-load} 事件。
相反,您可以依靠 Refresh 事件,看看我创建的这个演示用法的示例
store.loadData 会在 ExtJs 4.2.5 的商店上触发加载事件吗?
文档说明它确实如此:http://docs-devel.sencha.com/extjs/4.2.5/#!/api/Ext.data.Store-method-loadData
但鉴于我所经历的,它看起来并不像它,并且还查看了源代码:
loadData: function(data, append) {
var length = data.length,
newData = [],
i;
//make sure each data element is an Ext.data.Model instance
for (i = 0; i < length; i++) {
newData.push(this.createModel(data[i]));
}
this.loadRecords(newData, append ? this.addRecordsOptions : undefined);
},
好的,loadRecords 可能正在触发它吧?
loadRecords: function(records, options) {
var me = this,
i = 0,
length = records.length,
start,
addRecords,
snapshot = me.snapshot;
if (options) {
start = options.start;
addRecords = options.addRecords;
}
if (!addRecords) {
delete me.snapshot;
me.clearData(true);
} else if (snapshot) {
snapshot.addAll(records);
}
me.data.addAll(records);
if (start !== undefined) {
for (; i < length; i++) {
records[i].index = start + i;
records[i].join(me);
}
} else {
for (; i < length; i++) {
records[i].join(me);
}
}
/*
* this rather inelegant suspension and resumption of events is required because both the filter and sort functions
* fire an additional datachanged event, which is not wanted. Ideally we would do this a different way. The first
* datachanged event is fired by the call to this.add, above.
*/
me.suspendEvents();
if (me.filterOnLoad && !me.remoteFilter) {
me.filter();
}
if (me.sortOnLoad && !me.remoteSort) {
me.sort();
}
me.resumeEvents();
if (me.isGrouped()) {
me.constructGroups();
}
me.fireEvent('datachanged', me);
me.fireEvent('refresh', me);
},
那里也没有发射。
这是一个已知问题还是我遗漏了什么?
loadData
不会触发 load
事件,因为只要存储从 remote 数据源读取数据,就会触发 load
事件(docs)。 loadData
使用第一个参数中提供的 local 数据。
您发现文档中存在错误。我在 4.1.1 版中关注了您的研究,但我找不到 loadData
在那里触发 load
事件。
然而 loadRawData
曾在 4.1.1 中触发 load
事件,但在 4.2.5 中不再触发。在 source code 你可以阅读:
从 4.2 开始,此 (loadRawData) 方法将不再触发 {@link #event-load} 事件。
相反,您可以依靠 Refresh 事件,看看我创建的这个演示用法的示例