packages feed

cqrs-example-0.9.0: static/js/app/tasks.js

/*global define:false */
/*jslint browser: true */

define(["jquery", "knockout", "knockout.mapping", "app/services"], function ($, ko, ko_mapping, services) {
    "use strict";

    var exports = { };

    // Constructor for a new "tasks" view model.
    exports.ViewModel = function () {
        var viewModel = this;
        // Items: We start with an empty list of items.
        viewModel.items = ko_mapping.fromJS([]);
        // Archiving done tasks.
        viewModel.archiveDone = function () {
            console.log("Archiving completed tasks");
            services.archiveCompletedTasks();
        };
        // Remaining tasks.
        viewModel.remainingCount = ko.computed(function () {
            var c = 0;
            $.each(viewModel.items(), function (index, item) {
                if (item.done() === true) {
                    c += 1;
                }
            });
            return c;
        });
        // Toggle task between complete/reopened.
        viewModel.toggleTask = function (item) {
            var taskId = item.id();
            console.log("Toggling task ", taskId);
            // This is a bit racy, but in practice it shouldn't matter.
            if (item.done()) {
                services.reopenTask(taskId);
            } else {
                services.completeTask(taskId);
            }
        };
        // Reload functionality.
        viewModel.reload = function () {
            services.queryTasks({ success: function (data) {
                console.log("Received tasks data:", data);
                ko_mapping.fromJS(data, viewModel.items);
            }});
        };
        // Creating a new task
        viewModel.newTaskTitle = ko.observable("");
        viewModel.addTask = function () {
            var title = viewModel.newTaskTitle();
            // Do nothing if no value has been set
            if (title !== "") {
                viewModel.newTaskTitle("");
                console.log("Adding task ", title);
                services.addTask(title, {
                    success: function () {
                        console.log("Success! Reloading tasks");
                        viewModel.reload();
                    }
                });
            }
        };
    };

    return exports;
});