每次(弹出)窗口中的网格呈现时,我都会使用底部的函数(重新)创建商店。但是我不明白为什么typeDetails
与使用Ext.pluck
(基于https://stackoverflow.com/a/5709096/34806)记录在较长行上的内容不同。
以前的控制台日志始终打印出我期望的内容,默认情况下为[{"label":"","value":""}]
,或者预先填充typeDetails,例如:
[{"label":"foo","value":"bar"},{"label":"what","value":"ever"}]
但是后一个console.log总是表示一个空数组,而且我总是得到一个空网格。采摘的线路有问题吗?这个答案,尽管不是被接受的或得分最高的,已经超过了20个。我还能做些什么才能解决这个问题。
listeners: {
render: {
fn: function (grid) {
var typeDetails = this.typeDetails || [{ 'label': '', 'value': ''}];
var store = Ext.create('Ext.data.Store', {
fields: ['label', 'value'],
data: [typeDetails]
});
console.log(Ext.encode(typeDetails));
console.log(Ext.encode(Ext.pluck(grid.store.data.items, 'data')));
grid.reconfigure(store);
}
}
}
UPDATE / OUTPUT
回应Evan的评论“如果它默认数据,下面的商店数据将是[[{label: '', value: ''}]]
”是从我的控制台直接复制/粘贴的内容:
[{"label":"","value":""}]
[]
但我认为这是因为 grid.reconfigure之前的日志记录是。尽管如此,我的控制台/日志记录如下:
grid.reconfigure(store);
console.log(Ext.encode(this.typeDetails));
console.log(Ext.encode(typeDetails));
console.log(Ext.encode(Ext.pluck(grid.store.data.items, 'data')));
在非默认情况下(当this.typeDetails 预先填充时)导致以下神秘输出:
[{"label":"foo","value":"bar"},{"label":"what","value":"ever"}]
[{"label":"foo","value":"bar"},{"label":"what","value":"ever"}]
[{"label":"","value":""}]
这是一个可编辑的网格,非默认值只能存在于默认的空行之后,因此就好像保留了空行一样。
答案 0 :(得分:0)
以下替代方法有效:
listeners: {
render: {
fn: function (grid) {
var store = Ext.create('Ext.data.Store', {
fields: ['label', 'value'],
data: []
});
if (this.typeDetails) {
for (var i = 0, n = this.typeDetails.length; i < n; i++) {
store.add(this.typeDetails[i]);
}
}
else {
store.add({ 'label': '', 'value': '' });
}
grid.reconfigure(store);
}
}
}