As with previous tutorial it isn't possible to properly show server stuff on HTML only hosting. Code is below, for interactive version please go to http://learn.knockoutjs.com/#/?tutorial=loadingsaving
Also, you can see generated javascript using developer tools of your preferred browser
namespace MVCTest { [ViewModel] public class LoadingAndSavingViewModel { public class Task { public Title : string { get; set; } public IsDone : bool { get; set; } public _destroy : bool { get; set; } } public Tasks : List[Task] { get; set; } public NewTaskText : string { get; set; } public IncompleteTasks : IEnumerable[Task] { get { def result = List(); foreach(t in Tasks) when(!t.IsDone) result.Add(t); result } } public this() { server.Load(tasks => { Tasks = tasks.ToList(); }); } AddTask() : void { Tasks.Add(Task() <- (Title = NewTaskText, IsDone = false, _destroy = false)); NewTaskText = ""; } RemoveTask(task : Task) : void { task._destroy = true; _ = Tasks.Remove(task); } Save() : void { server.Save(Tasks, result => { js alert(result); }); } public class Server { public Save(tasks : IEnumerable[Task]) : string { $<# Server received $(tasks.Count()) task(s). $(tasks.Count(t => t.IsDone)) of which are marked as done. $(tasks.Count(t => t._destroy)) of which are marked for deletion.#>; } public Load() : IEnumerable[Task] { [ Task() <- (Title = "Wire the money to Panama", IsDone = true, _destroy = false), Task() <- (Title = "Get hair dye, beard trimmer, dark glasses and \"passport\"", IsDone = false, _destroy = false), Task() <- (Title = "Book taxi to airport", IsDone = false, _destroy = false), Task() <- (Title = "Arrange for someone to look after the cat", IsDone = false, _destroy = false), ] } } } public partial module Views { [View()] public LoadingAndSavingView(viewModel : LoadingAndSavingViewModel) : string { _ = viewModel; <# <div xmlns=""> <h3>Tasks</h3> <form data-bind="submit: AddTask"> Add task: <input data-bind="value: NewTaskText" placeholder="What needs to be done?" /> <button type="submit">Add</button> </form> <ul data-bind="foreach: Tasks, visible: Tasks().length > 0"> <li> <input type="checkbox" data-bind="checked: IsDone" /> <input data-bind="value: Title, disable: IsDone" /> <a href="#" data-bind="click: $root.RemoveTask">Delete</a> </li> </ul> You have <b data-bind="text: IncompleteTasks().length"> </b> incomplete task(s) <span data-bind="visible: IncompleteTasks().length == 0"> - it's beer time!</span> <button data-bind="click: Save">Save</button> </div> #> } } }