I know this is an old question, but it caused me enough pain to guarantee a recommendation for future visitors.
I rewrote the sample code above in TypeScript.
/// <reference path="../Scripts/typings/jquery/jquery.d.ts" /> /// <reference path="../Scripts/typings/Sammy/Sammy.d.ts" /> import sammy = require("sammy"); class WebmailViewModel { // Data public folders: Array<string> = ['Inbox', 'Archive', 'Sent', 'Spam']; public chosenFolderId: KnockoutObservable<any> = ko.observable(); public chosenFolderData: KnockoutObservable<any> = ko.observable(); public chosenMailData: KnockoutObservable<any> = ko.observable(); // Behaviours public goToFolder = function (folder) { window.location.hash = folder }; public goToMail = function (mail) { window.location.hash = mail.folder + '/' + mail.id }; // Client-side routes public SammyApp: sammy.Application = Sammy().get('#:folder', context => { this.chosenFolderId(context.params.folder); this.chosenMailData(null); $.get("/mail", { folder: context.params.folder }, this.chosenFolderData); }).get('#:folder/:mailId', context => { this.chosenFolderId(context.params.folder); this.chosenFolderData(null); $.get("/mail", { mailId: context.params.mailId }, this.chosenMailData); }).get('', context => { context.app.runRoute('get', '#Inbox'); }).run(); };
Then at $ (document) .ready ()
var viewModel = new WebmailViewModel; ko.applyBindings(viewModel);
Many thanks to @Vladimir, whose answer to question 19395335 lead me to a solution.
Greetings.
source share