Script# - the .NET response to Google Web Toolkit
Upcoming SlideShare
Loading in...5
×
 

Script# - the .NET response to Google Web Toolkit

on

  • 420 views

 

Statistics

Views

Total Views
420
Views on SlideShare
419
Embed Views
1

Actions

Likes
0
Downloads
4
Comments
0

1 Embed 1

http://www.slideshare.net 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Script# - the .NET response to Google Web Toolkit Script# - the .NET response to Google Web Toolkit Presentation Transcript

  • Script# - the .NET response to Google Web Toolkit Gojko Adzic http://gojko.net [email_address]
  • 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)
  • 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)
  • 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
  • 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!
  • Visual Studio Integration
    • Project templates for class libraries and web sites
    • C# editor for scriptlets (has some bugs, though)
  • MSBuild Integration
    • ScriptSharp target does the job for you <Import Project=&quot;$(ProgramFiles) StuffScriptSharpv1.0 Stuff.ScriptSharp.targets&quot; />
    • Remember <NoStdLib>True</NoStdLib>
    • Automatically added by the VS ScriptSharp template
  • 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)
  • AJAX support
    • Add <script type=&quot;text/javascript&quot; src=&quot;App_Scripts/ssfx.Core.Debug.js&quot; >
    • </script>
    • Use ScriptFX.Net. HTTPRequest for cross-browser compatible AJAX requests
    • Supports Script transport for Cross-Domain Ajax!
  • Ajax/JSON
    • private void OnOKButtonClick(object sender, EventArgs e) {
    • Dictionary parameters = new Dictionary();
    • parameters[&quot;prefix&quot;] = _prefixTextBox.Text;
    • parameters[&quot;count&quot;] = 5;
    • _request = HTTPRequest.CreateRequest(&quot;CompletionList.ashx/GetItemsViaPost&quot;, 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(&quot;, &quot;);
    • }
    • }
  • 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!
  • 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
  • Quirks: Namespace references
    • Does not work:
      • DOMElement runner= System.DHTML. Document.GetElementById(
      • runnerElementId);
    • Works:
      • Using System.DHTML;
      • DOMElement runner= Document.GetElementById(runnerElementId);
  • 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
  • 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(&quot;I shouldn't be seeing this???&quot;);
    • Number b = 0;
    • if (b == null)
    • Script.Alert(&quot;I shouldn't be seeing this either???&quot;);
  • 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
  • Quirks: Events
    • DOMEventHandler expects void() delegate
    • Use Window.Event.ReturnValue to return false from an event
  • What’s good?
    • Working with complex JS files is much very productive
    • VS integration
    • MSBuild integration
    • Basic Documentation is great
  • 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
  • Where next?
    • http://gojko.net
    • http://projects.nikhilk.net/ScriptSharp/
    • http://code.google.com/p/extsharp/
    • http://www.codeplex.com/JQuerySharp
  • What next?
    • Dependency Injection with Castle – Oct 23 rd
    • Asynchronous Enterprise Applications with NServiceBus – Nov 27 th
    • TDD with .NET – Dec 17 th
    • ALT.NET Community evening – Jan 13th