There is no function to get underlying data from marks in the jsapi, only the 'summary data' from marks. Your workaround of populating a quick filter and then querying the quick filter is one way. Another workaround I've suggested in the past is to have the row-level data on a text table and have all of the other filtering affect that text table. You can even 'hide' this text table by floating it and making it 1x1 pixels. Now you can call selectMarksAsync on that view, selecting all of the marks, and getSelectedMarksAsync to get the data from it.
Thanks MIchael -
I'm investigating how to use the workaround you selected with the floating text table, but am running in to a roadblock when trying to select all the marks on that view using selectMarksAsync.
How can you select all of the marks? In the JS API reference, the signature of that function takes in which marks should be selected - is there a form that will select all available marks?
If I remember correctly the filter update type 'ALL' works on applyFilterAsync, but not on selectMarksAsync. So you have to choose a dimension where you know of all of the values and select all of them. To make this easier, you could create a dummy dimension that has only one value and put it on the viz.