Список задач
Вложений: 1
Всем привет.
Есть приложение на связке Angular + Web2Py - простой список задач. Идея в том, что в поле ввода мы пишем задачу и по нажатии клавиши Enter она создается (добавляется в БД на Web2Py). У задачи есть checkbox, который отображает статус задачи (выполнена / не выполнена). Однако он не работает (т.е. нажать на него можно, но он ничего не делает). Так же есть кнопка для удаления задачи из списка. Для наглядности приложил к сообщению скриншот. Вот исходный код программы: 1) Файл main.html
<div class="row">
<div class="col-sm-8 col-sm-offset-2">
<form ng-submit="add()">
<input ng-model="newTask" class="new-task form-control input-lg" ng-class="{first: tasks.length === 0}"
type="text" placeholder="What needs to be done?">
</form>
<table class="tasks table table-hover">
<tr ng-repeat="task in tasks">
<td class="complete">
<input ng-model="task.complete" type="checkbox" ng-change="change()">
<!-- В предедущей строке я попробовал применить ngChange, но не смог написать правильный код для ф-ии change() -->
</td>
<td class="title">
{{task.title}}
</td>
<td class="remove">
<button ng-click="remove(task)" class="btn btn-danger">
<span class="glyphicon glyphicon-remove"></span>
</button>
</td>
</tr>
</table>
</div>
</div>
2) Файл main-controller.js
angular.module('todo')
.controller('MainController', function ($scope, $resource) {
var Task = $resource('/todo/api/tasks/:id', {id: '@id'});
function refresh() {
Task.query(function (tasks) {
$scope.tasks = tasks;
});
}
refresh();
// Создание новой задачи:
$scope.add = function () {
if ($scope.newTask) {
var task = new Task({
complete: false,
title: $scope.newTask
});
task.$save()
.then(refresh);
$scope.newTask = undefined;
}
};
// Удаление задачи из списка:
$scope.remove = function (task) {
task.$remove()
.then(refresh);
};
// Функция, которая должна сохранять галочку checkbox в БД:
function change() {
//$scope.complete = true; // Не работает! Как правильно написать???
}
});
Требуется дописать данное приложение, исправив код так, чтобы галочка о выполнении задачи сохранялась в БД. Посмотрев документацию, нашел директиву ngChange, которая вызывает определенную функцию, если пользователь изменил значение поля ввода. Данную директиву я применил в строке 11 в main.html. Но как написать функцию change(), которая будет сохранять галочку checkbox для выбранной задачи в БД я не знаю, поэтому прошу помощи. P.S. C Angular столкнулся первый раз, поэтому плохо в нём разбираюсь. |
Цитата:
Цитата:
|
Цитата:
|
Цитата:
Если ты хочешь что-то сохранять на сервере в БД - по наступлении неких событий, шли запросы с данными на сервер и пусть он те данные сохраняет. |
desergik, вот ка нужно делать тестовые примеры...
<!DOCTYPE html>
<html>
<head>
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<!--
<script src='http://code.jquery.com/jquery-latest.js'></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
<link rel='stylesheet type=text/css href=tmp.css' />
-->
<style type='text/css'>
</style>
<script type='text/javascript'>
angular.module('test', [])
.controller(
'ctrl',
[
'$scope',
'$http',
ctrl
]
);
function ctrl($scope,$http) {
$scope.items = [
{id: 0, name: 'Target 0', close: false},
{id: 1, name: 'Target 1', close: false},
{id: 2, name: 'Target 2', close: false}
];
$scope.status=function (Obj){
alert(Obj.id + ' = ' + Obj.close);
// тут отправляй запрос на сервер
/*
$http.get(<url>).success(function(data) {
alert('Ok');
});
*/
};
}
</script>
</head>
<body ng-app="test">
<div ng-controller="ctrl">
<ul>
<li ng-repeat='item in items'>
<span>{{item.name}}</span>
<label>
<input type='checkbox' ng-model='item.close' ng-change='status(item)' />
Close
</label>
</li>
</ul>
</div>
</body>
</html>
|
Прочитал подробнее про $resource. Попробовал написать сохранение галочки checkbox для выбранной задачи в БД с использованием $resource вместо $http:
// Функция, которая должна сохранять галочку checkbox в БД:
$scope.change = function()
{
var onetask = Task.get( function()
{
onetask.complete = true;
onetask.$save();
});
};
Но программа все равно не работает. Подозреваю, что это происходит из-за того, что метод get() не знает к какому полю БД нужно обратится. Как решить проблему? Заранее спасибо. |
Цитата:
|
| Часовой пояс GMT +3, время: 06:53. |