It turns out to be really easy to incorporate jQuery into an Objective-C WebObjects app (targeting GNUstep Web). In fact, it doesn’t really touch the Objective-C source at all. I defined a WOJavascript object that loads jQuery itself from the application’s web server resources folder, so it can be reused across multiple components:
jquery_script:WOJavaScript {scriptFile="jquery-2.0.2.js"}
Then in the components where it’s used, any field that needs uniquely identifying should have a CSS identifier, which can be bound via WebObjects’s id binding. In this example, a text field for entering an email address in a form will only be enabled if the user has checked a “please contact me” checkbox.
email_field:WOTextField {value=email; id="emailField"} contact_boolean:WOCheckBox {checked=shouldContact; id="shouldContact"}
The script itself can reside in the component’s HTML template, or in a WOJavascript that looks in the app’s resources folder or returns javascript that’s been prepared by the Objective-C code.
<script> function toggleEmail() { var emailField = $("#emailField"); var isChecked = $("#shouldContact").prop("checked"); emailField.prop("disabled", !isChecked); if (!isChecked) { emailField.val(""); } } $(document).ready(function() { toggleEmail(); $("#shouldContact").click(toggleEmail); }); </script>
I’m a complete newbie at jQuery, but even so that was easier than expected. I suppose the lesson to learn is that old technology isn’t necessarily incapable technology. People like replacing their web backend frameworks every year or so; whether there’s a reason (beyond caprice) warrants investigation.