<div dir="ltr"><div>Is this app using jQuery? I'm not familliar with sorttable, but it looks like it goes way out of its way to avoid using jQuery for things like event handling and DOM selection, traversal and manipulation. Here is another table library that is pretty powerful if you are already using jQuery, might as well take advantage of it: <a href="https://datatables.net/">https://datatables.net/</a></div>
<div><br>Can you save the sort column and direction as a cookie each time a column header is clicked (looks like you would need to modify the sorttable code)?</div><div>Can you do any server-side sorting based on the column and direction that is passed back to the server so that your table is initially sorted as the user desires before the page loads?</div>
</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, May 22, 2014 at 3:54 PM, Larry Martell <span dir="ltr"><<a href="mailto:larry.martell@gmail.com" target="_blank">larry.martell@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="">On Thu, May 22, 2014 at 3:59 PM, Bill Barron <<a href="mailto:bill.r.barron@gmail.com">bill.r.barron@gmail.com</a>> wrote:<br>

> Think of it this way. It is this mailing list's responsibility to send email<br>
> updates to its subscribers as they come in and not the subscribers<br>
> responsibility to check for updates every 10 seconds. This is not only less<br>
> resource intensive for the mailing list, it's also more efficient for the<br>
> subscribers.<br>
<br>
</div>Thanks I appreciate your replies. I understand about event driven<br>
programming vs polling. This is a big nasty old PHP app that I<br>
inherited. I was asked to add client side column based sorting to it,<br>
which I did using the sorttable package<br>
(<a href="http://www.kryogenix.org/code/browser/sorttable/" target="_blank">http://www.kryogenix.org/code/browser/sorttable/</a>). That was all fine.<br>
Then I was asked to make the client side sort selection persist across<br>
a server side refresh. This is where I went down the rabbit hole. To<br>
achieve this I added a hidden field that gets set to the sort column<br>
id (along with the sort direction) by the sorttable onclick handler. I<br>
pass that back with the form to the server, who passes it back to the<br>
browser. I then test for it, and if it's set I call the sorttable<br>
function. Problem is that I can't call the function before it is<br>
defined. I think I have this solved with this code:<br>
<br>
var interval = setInterval(function() {<br>
    if (typeof(parent.frames['main_frame'].sorttable) === 'undefined') return;<br>
    if (! parent.frames['main_frame'].sorttable.hasOwnProperty('innerSortFunction'))<br>
return;<br>
    clearInterval(interval);<br>
    parent.frames['main_frame'].sorttable.innerSortFunction.apply(parent.frames['main_frame'].document.getElementById("OpenFace-3"),<br>
[]);<br>
}<br>
<br>
It may not be pretty, but it appear to be working and I can move on to<br>
more interesting things.<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
> On Thu, May 22, 2014 at 2:49 PM, Bill Barron <<a href="mailto:bill.r.barron@gmail.com">bill.r.barron@gmail.com</a>><br>
> wrote:<br>
>><br>
>> I agree with Rick. You need to see what code is defining someObject or<br>
>> what code is setting the class on the table and when that code defines<br>
>> someObject it should trigger an event that the rest of your code listens for<br>
>> or provide some method of checking when it has loaded. If this is Modernizr<br>
>> and you're doing feature detection, then check out Modernizr.load().<br>
>> (formerly YepNope). If you are just waiting for a script to load, you may be<br>
>> interested in AMD JavaScript modules.  If your scripts are loaded and you<br>
>> are just waiting for some event to take place or some object to be defined,<br>
>> then modify the code that defines someObject or sets the table class or see<br>
>> if it has functionality built in already to notify the rest of your code<br>
>> that it is ready. It is that object's job to notify the rest of your code<br>
>> through events or promises that it has done it's part and defined<br>
>> someObject.<br>
>><br>
>> If the thing that defines someObject is your own code and not a 3rd party<br>
>> library or framework, consider adding a getSomeObject method that returns a<br>
>> promise. That way you could just do this:<br>
>><br>
>> getSomeObject.then(function (someObject) {<br>
>>     // use someObject here<br>
>> });<br>
>><br>
>> Thanks,<br>
>> Bill<br>
>><br>
>><br>
>> On Thu, May 22, 2014 at 2:41 PM, Larry Martell <<a href="mailto:larry.martell@gmail.com">larry.martell@gmail.com</a>><br>
>> wrote:<br>
>>><br>
>>> On Thu, May 22, 2014 at 3:13 PM, Rik Sagar <<a href="mailto:org.whatwg@sagar.org">org.whatwg@sagar.org</a>> wrote:<br>
>>> > Depends where the object comes from is and who's setting it!<br>
>>> ><br>
>>> > Couldn't you fire an event when the object is created, then do whatever<br>
>>> > work<br>
>>> > you need to do in the event listener ?<br>
>>> ><br>
>>> > Alternatively, can "someObject" be an object inside "otherObject", for<br>
>>> > example, otherObject.someObject.<br>
>>> ><br>
>>> > If you have it that way, you can write a setter/getter on "otherObject"<br>
>>> > for<br>
>>> > someObject.  When someone does "otherObject.someObject = new Object();"<br>
>>> > your<br>
>>> > setter function gets called with the new value.<br>
>>> ><br>
>>> > Either is preferable to the busy loop approach if you can do it.<br>
>>><br>
>>> The scenario is: After my page is loaded I need to call a js function<br>
>>> that will only exist some time after a table gets given a certain<br>
>>> class. When I try to call that function from an onload function it<br>
>>> fails most of the time because the function has not yet been defined.<br>
>>> If I call that function from a setTimeout that waits 1 second it works<br>
>>> 99% of the time. I'd like to just wait until the class gets put on the<br>
>>> table and the function exists and then call it.<br>
>>><br>
>>> I think I may have this working. I did this:<br>
>>><br>
>>> var interval = setInterval(function() {<br>
>>>     if (typeof elem == 'undefined') return;<br>
>>>     clearInterval(interval);<br>
>>><br>
>>>     // the rest of the code<br>
>>> }, 10);<br>
>>><br>
>>> So far this looks good. I need to run it for a day or 2 and make sure.<br>
>>><br>
>>><br>
>>> > On Thu, May 22, 2014 at 10:32 AM, Larry Martell<br>
>>> > <<a href="mailto:larry.martell@gmail.com">larry.martell@gmail.com</a>><br>
>>> > wrote:<br>
>>> >><br>
>>> >> I need to do the equivalent of this in javascript:<br>
>>> >><br>
>>> >> while (typeof someObject == 'undefined') {<br>
>>> >>      sleep(10);  // 10ms<br>
>>> >> }<br>
>>> >><br>
>>> >> And I just can't quite figure out how to code this.<br>
>>> >><br>
>>> >> I have this:<br>
>>> >><br>
>>> >><br>
>>> >> function sleep(ms, callback, arg) {<br>
>>> >>     setTimeout(function() {<br>
>>> >>         callback(arg);<br>
>>> >>     }, ms);<br>
>>> >> }<br>
>>> >><br>
>>> >> function waitForDef(elem) {<br>
>>> >>     if (typeof elem == 'undefined') {<br>
>>> >>         sleep(10, waitForDef, elem)<br>
>>> >>     }<br>
>>> >> }<br>
>>> >><br>
>>> >> But it's not clear to me how to use this from my code.<br>
>>> _______________________________________________<br>
>>> Help mailing list<br>
>>> <a href="mailto:Help@lists.whatwg.org">Help@lists.whatwg.org</a><br>
>>> <a href="http://lists.whatwg.org/listinfo.cgi/help-whatwg.org" target="_blank">http://lists.whatwg.org/listinfo.cgi/help-whatwg.org</a><br>
>><br>
>><br>
><br>
</div></div></blockquote></div><br></div>