I have a grid with canRemoveRecords:true. The little orange X works just fine. I have an OPEN button that should be disabled if there is no selected record. The grid had the following code invoked on selectionChanged.
This worked fairly well, except when a record is removed using the X. Clicking the X selects the record briefly and then a few moments later, the record is gone. The OPEN button is not disabled.
In my research, I understood that only user actions can trigger selectionChanged.
So, I kept looking to understand my disconnect. I finally figured to override the dataChanged event on the grids 'data'.
This parses correctly, and the function is invoked when I create a new subscriber. Then remove it on the next click.
I finally got the button disabled. Thinking it was a timing issue, I added a delay.
This works. But, I am wondering if there is a better way. This seems like a kluge.
Also, after last minute testing I find that this technique fails with warnOnRemoval:true on the grid. Obviously, while the confirmation dialog is showing, the record is still selected.
Thanks,
Rick
P.S. I am running SmartClient Version: v8.3p_2014-06-27/EVAL on Mozilla Firefox 20.0 with Firebug using Windows 7 Premium 64 bit.
Code:
if ( grid.anySelected() ) { IssueSubscriberOpenButton.setDisabled(false); var rec = grid.getSelectedRecord(); Application.currentIssueID = rec.IssueID; Application.currentSubscriberTeamMemberID = rec.TeamMemberID; } else { IssueSubscriberOpenButton.setDisabled(true); }
In my research, I understood that only user actions can trigger selectionChanged.
By design, selectionChanged fires only do to user events, not programmatic calls (otherwise it's very easy to get into infinite loops).
Code:
isc.ListGrid.create({ ID:"IssueSubscriberGrid", autoDraw:false, dataSource:"IssueSubscriber", fields:[ { name:"TeamMemberName", title:"Subscriber", width:"*", canEdit:false }, { name:"Internal", title:"Internal", valueField:"OrganizationID", displayField:"Internal", canEdit:false, type:"boolean" }, { name:"OrganizationName", title:"Organization", width:"*", valueField:"OrganizationID", displayField:"OrganizationName", canEdit:false }, { name:"Enabled", title:"Enabled", canEdit:false, type:"boolean" }, { name:"TeamMemberEmail", title:"Email", width:"*", canEdit:false }, { name:"TeamMemberSMS", title:"SMS", width:70, canEdit:false }, { name:"AnyChangeOption", title:"Any Change", type:"boolean" }, { name:"StatusChangeOption", title:"Status Change", type:"boolean" }, { name:"DueReminderOption", title:"Due Reminder", type:"boolean" }, { name:"DueReminderDate", title:"Date", width:"10%", type:"date" }, { name:"DueReminderTime", title:"Time", width:"10%", type:"time" } ], showDetailFields:false, listEndEditAction:"next", showFilterEditor:false, canEdit:true, canSort:false, sortDirection:false, canReorderFields:false, dragDataAction:"none", autoFetchData:true, canRemoveRecords:true, selectionType:"single", "xsi:type":"ListGrid", selectionChanged:"IssueSubscriberGrid_selectionChanged(this);", recordDoubleClick:"OpenIssueSubscriber(record, IssueSubscriberForm);" }) IssueSubscriberGrid.data.setProperty( "dataChanged", function () { IssueSubscriberGrid_selectionChanged(IssueSubscriberGrid); } ); //IssueSubscriberGrid.data.dataChanged = function () { IssueSubscriberGrid_selectionChanged(IssueSubscriberGrid) }
15:28:28.052:MUP0:INFO:Log:********************* IssueSubscriber_NewButton_click
15:28:28.230:MUP0:INFO:Log:***END***END***END*** IssueSubscriber_NewButton_click
15:28:34.083:IFCS8:DEBUG:Log:********************** IssueSubscribersForm.itemChanged
15:28:34.100:IFCS8:DEBUG:Log:***END***END***END*** IssueSubscribersForm.itemChanged
15:28:41.128:IBLR8:DEBUG:Log:********************** IssueSubscribersForm.itemChanged
15:28:41.129:IBLR8:DEBUG:Log:***END***END***END*** IssueSubscribersForm.itemChanged
15:28:41.228:MUP3:INFO:Log:********************* IssueSubscriberForm_SaveButton_click
15:28:41.374:MUP3:INFO:Log:***END***END***END*** IssueSubscriberForm_SaveButton_click
15:28:51.775:MDN5:INFO:Log:********************* IssueSubscriberGrid_selectionChanged
15:28:51.780:MDN5:INFO:Log:***END***END***END*** IssueSubscriberGrid_selectionChanged
15:28:28.230:MUP0:INFO:Log:***END***END***END*** IssueSubscriber_NewButton_click
15:28:34.083:IFCS8:DEBUG:Log:********************** IssueSubscribersForm.itemChanged
15:28:34.100:IFCS8:DEBUG:Log:***END***END***END*** IssueSubscribersForm.itemChanged
15:28:41.128:IBLR8:DEBUG:Log:********************** IssueSubscribersForm.itemChanged
15:28:41.129:IBLR8:DEBUG:Log:***END***END***END*** IssueSubscribersForm.itemChanged
15:28:41.228:MUP3:INFO:Log:********************* IssueSubscriberForm_SaveButton_click
15:28:41.374:MUP3:INFO:Log:***END***END***END*** IssueSubscriberForm_SaveButton_click
15:28:51.775:MDN5:INFO:Log:********************* IssueSubscriberGrid_selectionChanged
15:28:51.780:MDN5:INFO:Log:***END***END***END*** IssueSubscriberGrid_selectionChanged
Code:
function testIssueSubscriberGrid_selection() { if ( grid.anySelected() ) { IssueSubscriberOpenButton.setDisabled(false); var rec = grid.getSelectedRecord(); Application.currentIssueID = rec.IssueID; Application.currentSubscriberTeamMemberID = rec.TeamMemberID; } else { IssueSubscriberOpenButton.setDisabled(true); } } setTimeout(testIssueSubscriberGrid_selection, 500);
Also, after last minute testing I find that this technique fails with warnOnRemoval:true on the grid. Obviously, while the confirmation dialog is showing, the record is still selected.
Thanks,
Rick
P.S. I am running SmartClient Version: v8.3p_2014-06-27/EVAL on Mozilla Firefox 20.0 with Firebug using Windows 7 Premium 64 bit.
Comment