extjsAction按钮的处理程序使用以下代码调用函数。
Add: function() {
var window = Ext.getCmp('wndAdd');
window.items.items[0].getStore().reload;
var Grid1 = Ext.getCmp('grdAll');
var grdStore2 = Ext.getCmp('grid2').getStore();
var i = 0;
var IDList = new Array();
for (i = 0; i < grdStore2.data.length; i++) {
IDList[i] =
grdStore2.data.items[i].data['ID'];
}
Grid1.getView().getRowClass = function(record, index) {
if (IDList.contains(record.data["ID"])) {
return 'disabled-row';
}
};
window.show();
}
但getRowClass函数仅适用于第一次按钮单击。不会禁用添加的行。
答案 0 :(得分:2)
getRowClass只需要分配一次。它不是您调用的函数,它是每次呈现行时网格内部调用的函数。不应该在事件处理函数内部分配它,而应该在应用程序级别的某个地方分配它(例如,首先配置Grid1本身的地方将是最合理的位置)。这可能是你的问题,也可能不是你的问题,这取决于你的Add函数被调用的方式,这一点尚不清楚。请记住,由于您依赖于getRowClass中的IDList,因此您还必须引用该函数所在范围内的该变量,并且您可能还必须添加检查以确保它在访问之前有效它
您也没有显示Grid1重新渲染的位置。如上所述,getRowClass仅在呈现行时执行,因此除非您在代码中未显示的地方刷新Grid1,否则将永远不会调用getRowClass。
答案 1 :(得分:1)
是的,在配置网格时,只调用一次getRowClass。但我想要的东西会触发每个时候窗口.show()被触发。我在window.onshow事件中使用了以下代码。
for (var i = 0; i < Grid1.getStore().data.length; i++) {
var element = Ext.get(Grid1.getView().getRow(i));
var record = Grid1.getStore().getAt(i);
if (IdList.contains(record.data.ID)) {
element.addClass('disabled-row')
} else {
element.removeClass('disabled-row')
}
}
答案 2 :(得分:1)
仅供参考,虽然我很高兴您找到了适合您的解决方案,但我不确定您是否了解getRowClass。它不会被调用一次 - 每次重新渲染网格行时(每次数据更改时)都会调用它。它只在您的代码中被调用一次,因为您的代码未正确设置。
我并不完全了解您的用例,但无论窗口显示如何,只要网格的基础数据实际发生变化,行条带化只需要更改。当您正确设置getRowClass函数时,网格会在需要时自动为您调用它,并且它应该“正常工作”。应该不需要编写迭代代码,这只会增加额外的开销。
再次,仅供参考。 :)
答案 3 :(得分:0)
一旦提供了更多信息,我将用适当的答案编辑我的回复。
你什么时候开枪getRowClass?看起来你正在创建这个函数但从来没有真正调用过它。
函数是否出错,完全被调用,或者只是没有做你想做的事情?