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;
});