1 / 21

Script# - the .NET response to Google Web Toolkit

Script# - the .NET response to Google Web Toolkit. Gojko Adzic http://gojko.net gojko@gojko.com. Why should you care?. A much more productive way to write and maintain complex JavaScript code Compile-time consistency check Refactoring support

augustus
Download Presentation

Script# - the .NET response to Google Web Toolkit

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Script# - the .NET response to Google Web Toolkit Gojko Adzic http://gojko.net gojko@gojko.com

  2. Why should you care? • A much more productive way to write and maintain complex JavaScript code • Compile-time consistency check • Refactoring support • Full Intellisense for DOM and your own JS classes • Lots of other VS IDE benefits • Free (not opensource, though)

  3. What Script# is not • It does not hide browser complexity • It does not abstract away JS peculiarities • It is not a general-purpose .NET to browser converter • It is not a widget/effect library (it has some, but not nearly like GWT)

  4. Under the hood • Compiles C# into JS directly • Replacement for System namespace, a mashup of .NET and JS • Sscorlib.dll in C# for Intellisense, • sscorlib.js in the browser • sscompat.js provides cross-browser compatibility • System.DHTML.Document, System.Script System.DHTML.Window link to the environment

  5. A very simple example • Script# library project • Compile C# into javascript • Execute from HTML • namespace.class used to instantiate objects • If you do the web site by hand, don’t forget sscompat.js!

  6. Visual Studio Integration • Project templates for class libraries and web sites • C# editor for scriptlets (has some bugs, though)

  7. MSBuild Integration • ScriptSharp target does the job for you <Import Project="$(ProgramFiles)\nStuff\ScriptSharp\v1.0\nStuff.ScriptSharp.targets" /> • Remember <NoStdLib>True</NoStdLib> • Automatically added by the VS ScriptSharp template

  8. Scriptlets • Script# webforms components • Add Script# assembly and page control to web.config • Use main() as an entry point to the component • No need to worry about script# initialisation • Put all scripts into App_Scripts folder (or use a VS template to create the project)

  9. AJAX support • Add <script type="text/javascript" src="App_Scripts/ssfx.Core.Debug.js" > </script> • Use ScriptFX.Net.HTTPRequest for cross-browser compatible AJAX requests • Supports Script transport for Cross-Domain Ajax!

  10. Ajax/JSON private void OnOKButtonClick(object sender, EventArgs e) { Dictionary parameters = new Dictionary(); parameters["prefix"] = _prefixTextBox.Text; parameters["count"] = 5; _request = HTTPRequest.CreateRequest("CompletionList.ashx/GetItemsViaPost", HTTPVerb.POST); _request.SetContentAsJSON(parameters); _request.Invoke(new HTTPRequestCompletedCallback(OnRequestComplete), null); } private void OnRequestComplete(HTTPRequest request, object context) { if (_request == request) { string[] values = (string[])_request.Response.GetObject(); _valuesLabel.Text = values.Join(", "); } }

  11. Behaviours • Declaratively attach functionality to DOM elements • Taken from ASP.NET Ajax (Atlas) • Popups, watermark, autocomplete, overlay etc… • Not a lot of widgets, but you can use ExtJS with ExtSharp!

  12. More advanced options • FxCop code analysis • Unit testing should follow soon • ASP.NET Ajax instead of sscorelib • Some silverlight support • MSN Messenger APIs • Facebook client API • Sidebar Gadgets

  13. Quirks: Namespace references • Does not work: DOMElement runner= System.DHTML.Document.GetElementById( runnerElementId); • Works: Using System.DHTML; DOMElement runner= Document.GetElementById(runnerElementId);

  14. Quirks: Compilation issues • VS New class wizard adds System, System.Data and System.Xml references • Script# compilation breaks as a result • Does not resolve indirect module dependencies • Nested namespaces not supported

  15. Quirks: 0 and null comparisons • if (something == null) and if (something == 0) compiled into if (!something) • Try this: Number a = null; if (a == 0) Script.Alert("I shouldn't be seeing this???"); Number b = 0; if (b == null) Script.Alert("I shouldn't be seeing this either???");

  16. Quirks: Scriptlets • Scriptlet tag has to be inside a form tag • If not, nothing happens, but you don’t get an alert • Inline Scriptlets use ScriptletArguments, pre-compiled ones use Dictionary

  17. Quirks: Events • DOMEventHandler expects void() delegate • Use Window.Event.ReturnValue to return false from an event

  18. What’s good? • Working with complex JS files is much very productive • VS integration • MSBuild integration • Basic Documentation is great

  19. What’s not so good? • Some unintuitive mismatch between C# and JS – type conversions, 0 and null… • Advanced stuff not documented that well • See the samples zip in the distribution! • Still not opensource

  20. Where next? • http://gojko.net • http://projects.nikhilk.net/ScriptSharp/ • http://code.google.com/p/extsharp/ • http://www.codeplex.com/JQuerySharp

  21. What next? • Dependency Injection with Castle – Oct 23rd • Asynchronous Enterprise Applications with NServiceBus – Nov 27th • TDD with .NET – Dec 17th • ALT.NET Community evening – Jan 13th

More Related