分享一个使用Backbone和Seajs构建的TODO小站(Nodejs环境适用)

分享一个使用Backbone和Seajs构建的TODO小站(Nodejs环境适用)

前段时间用Backbone和Seajs做了一个类似TODO的小站,目前用作记录自己的学习笔记。 还有许多不完善的地方,一直以来,自己做的这种东西都不太好意思拿出手。 刚才看到一个网友分享的一个用Backbone和requireJs做的论坛: http://cnodejs.org/topic/522dbf0e101e5745216f5b82 感觉不管好坏,分享一下总是好的,或许还能共共同交流学习! 网址:http://www.timefly.cn 代码:http://www.github.com/sarike/timefly


6 回复

分享一个使用Backbone和Sea.js构建的TODO小站(Node.js环境适用)

前段时间我用Backbone和Sea.js做了一个简单的TODO应用,目前主要用于记录我的学习笔记。尽管还有很多不完善的地方,但我还是想拿出来分享一下,希望可以与大家共同交流学习!

最近看到了一位网友分享的一个用Backbone和RequireJS构建的论坛: http://cnodejs.org/topic/522dbf0e101e5745216f5b82

这给了我很大的启发,于是我也尝试着使用Backbone和Sea.js来构建一个简单的TODO应用。

网址

你可以访问我的TODO小站: http://www.timefly.cn

代码

项目的源码托管在GitHub上: https://github.com/sarike/timefly

技术栈

  • Backbone.js:用于构建前端的MVC架构。
  • Sea.js:用于模块化管理和加载。
  • Node.js:后端服务器搭建。

示例代码

以下是一个简单的示例,展示了如何使用Backbone和Sea.js来构建一个TODO列表:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>TODO App</title>
    <!-- 引入Sea.js -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/seajs/3.0.0/sea.js"></script>
</head>
<body>

<div id="todo-app">
    <input type="text" id="new-todo" placeholder="What needs to be done?">
    <ul id="todo-list"></ul>
</div>

<script>
    seajs.use('./app/main'); // 引入主模块
</script>

</body>
</html>
// app/main.js
define(function(require, exports, module) {
    var $ = require('jquery');
    var Backbone = require('backbone');

    $(function() {
        var Todo = Backbone.Model.extend({
            defaults: {
                title: '',
                completed: false
            }
        });

        var TodoList = Backbone.Collection.extend({
            model: Todo
        });

        var TodoView = Backbone.View.extend({
            tagName: 'li',
            template: _.template('<%= title %>'),
            events: {
                'click .toggle': 'toggleCompleted'
            },
            initialize: function() {
                this.listenTo(this.model, 'change', this.render);
            },
            render: function() {
                this.$el.html(this.template(this.model.toJSON()));
                return this;
            },
            toggleCompleted: function() {
                this.model.set('completed', !this.model.get('completed'));
            }
        });

        var AppView = Backbone.View.extend({
            el: '#todo-app',
            events: {
                'keypress #new-todo': 'createOnEnter'
            },
            initialize: function() {
                this.collection = new TodoList();
                this.collection.on('add', this.addOne, this);
                this.render();
            },
            render: function() {
                var that = this;
                this.collection.each(function(item) {
                    that.addOne(item);
                });
            },
            createOnEnter: function(e) {
                if (e.which !== 13) return;
                var title = $('#new-todo').val();
                if (!title.trim()) return;
                this.collection.create({ title: title });
                $('#new-todo').val('');
            },
            addOne: function(todo) {
                var view = new TodoView({ model: todo });
                this.$('#todo-list').append(view.render().el);
            }
        });

        new AppView();
    });
});

以上代码展示了一个基本的TODO应用,包括模型、集合和视图的定义。通过Sea.js进行模块化管理,并使用Backbone来实现前端逻辑。

希望这个示例能帮助你更好地理解和使用Backbone和Sea.js来构建你的项目。如果你有任何问题或建议,请随时联系我!


亲后台用的神马数据库捏?

数据库是:Mysql 后端用的是:Python、Flask

挺赞的哦

嗨嗨,谢谢鼓励,好久之前就做了,一直没好意思拿出手

分享一个使用Backbone和Seajs构建的TODO小站(Nodejs环境适用)

前段时间我用Backbone和Seajs做了一个简单的TODO小站,用于记录我的学习笔记。尽管它还有很多需要改进的地方,但我认为分享出来还是有价值的,希望可以与大家共同交流学习。

技术栈

  • Backbone.js: 用于构建前端应用的MV*框架。
  • Seajs: 用于模块化加载和管理前端资源。
  • Node.js: 后端服务框架。

示例代码

这里提供一个基本的TODO列表的示例代码:

目录结构
/todo-app/
├── server/
│   └── app.js
├── public/
│   ├── css/
│   │   └── style.css
│   ├── js/
│   │   ├── main.js
│   │   ├── models/
│   │   │   └── todo.js
│   │   ├── views/
│   │   │   └── todo-view.js
│   │   ├── collections/
│   │   │   └── todos.js
│   │   └── routers/
│   │       └── app-router.js
│   └── index.html
└── package.json
server/app.js
const express = require('express');
const path = require('path');

const app = express();

app.use(express.static(path.join(__dirname, '../public')));

app.get('/', (req, res) => {
    res.sendFile(path.join(__dirname, '../public/index.html'));
});

app.listen(3000, () => {
    console.log('Server running on port 3000');
});
public/js/models/todo.js
define(function() {
    var Todo = Backbone.Model.extend({
        defaults: {
            title: '',
            completed: false
        }
    });
    
    return Todo;
});
public/js/views/todo-view.js
define(['jquery', 'underscore', 'backbone', 'models/todo'], function($, _, Backbone, Todo) {
    var TodoView = Backbone.View.extend({
        tagName: 'li',
        
        events: {
            'click .toggle': 'toggleTodo'
        },
        
        toggleTodo: function() {
            this.model.set('completed', !this.model.get('completed'));
        },
        
        render: function() {
            this.$el.html(`<input type="checkbox" class="toggle"> ${this.model.get('title')}`);
            return this;
        }
    });
    
    return TodoView;
});
public/js/collections/todos.js
define(['underscore', 'backbone', 'models/todo'], function(_, Backbone, Todo) {
    var Todos = Backbone.Collection.extend({
        model: Todo
    });
    
    return Todos;
});
public/js/routers/app-router.js
define(['jquery', 'underscore', 'backbone', 'collections/todos', 'views/todo-view'], function($, _, Backbone, Todos, TodoView) {
    var AppRouter = Backbone.Router.extend({
        routes: {
            '': 'index'
        },
        
        initialize: function() {
            this.todos = new Todos();
        },
        
        index: function() {
            this.todos.fetch().then(() => {
                // 渲染逻辑
            });
        }
    });
    
    var initializeApp = function() {
        var router = new AppRouter();
        Backbone.history.start();
    };
    
    return initializeApp;
});
public/js/main.js
require(['jquery', 'underscore', 'backbone', 'routers/app-router'], function($, _, Backbone, initializeApp) {
    initializeApp();
});
public/index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>TODO App</title>
    <link rel="stylesheet" href="/css/style.css">
</head>
<body>
    <div id="todo-app"></div>
    <script src="/js/main.js"></script>
</body>
</html>

结语

这是一个非常基础的TODO小站示例,其中使用了Backbone.js作为MV*框架,Seajs进行模块化管理,以及Node.js作为后端服务。你可以在此基础上进一步扩展和完善功能。希望对大家有所帮助!

回到顶部