Nodejs环境下有人用backbone.js 开发吗?
Nodejs环境下有人用backbone.js 开发吗?
最近发现一个轻量级js的mvc框架——backbone.js 官网链接戳我 他的特点是: 轻量级,支持jquery,自带路由,对象化视图,强大的sync机制减少页面大小从而加快页面显示。 但是用过后发现一些不好的地方: 它可以template去绑定视图的内容,虽然是方便编辑了,但是却要把切片改成一个个template是一件很蛋疼的事,假如一个sina门户的话就哭了。 用hash来做路由,如果是php开发的话,感觉就像是phper在跟着前端做项目的赶脚。
总之个人的感觉是:很牛逼,搭上node话很不错,是一种不错的趋势。但是商业开发的话,就祈祷老板不要变来变去。 以上是个人拙见, 希望有了解过backbone的童鞋一起来探讨下。
Node.js 环境下使用 Backbone.js 的探讨
引言
最近我发现了一个轻量级的 JavaScript MVC 框架——Backbone.js。这个框架因其轻量、简洁以及强大的功能而受到很多开发者的青睐。特别是在 Node.js 环境下,Backbone.js 可以很好地与后端数据交互,提供了一种优雅的解决方案。
官网链接
特点
- 轻量级:Backbone.js 的核心文件很小,只有不到 8KB(压缩后)。
- 支持 jQuery:Backbone.js 无缝集成 jQuery,可以利用 jQuery 提供的各种功能。
- 自带路由:Backbone.js 内置了路由功能,使得单页应用(SPA)的开发变得简单。
- 对象化视图:视图可以被封装成对象,便于管理和维护。
- 强大的 sync 机制:Backbone.js 的 sync 方法可以简化与服务器的数据交互。
使用体验
虽然 Backbone.js 很强大,但在实际开发中也存在一些挑战:
- 模板绑定:Backbone.js 支持通过模板来绑定视图内容,这虽然方便了视图的动态更新,但需要将 HTML 切片转换为模板,这在大型项目中可能会增加工作量。
- 路由机制:Backbone.js 使用 hash 来实现路由,这对于纯前端项目来说很方便,但对于需要与后端紧密配合的项目(如 PHP 项目),可能需要额外的处理。
示例代码
以下是一个简单的示例,展示了如何在 Node.js 环境下使用 Backbone.js 开发一个简单的应用:
// server.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 is running on port 3000');
});
<!-- public/index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Backbone.js with Node.js</title>
<script src="/js/jquery.min.js"></script>
<script src="/js/underscore-min.js"></script>
<script src="/js/backbone-min.js"></script>
</head>
<body>
<div id="app"></div>
<script type="text/template" id="app-template">
<h1><%= message %></h1>
</script>
<script>
const AppView = Backbone.View.extend({
el: '#app',
template: _.template($('#app-template').html()),
initialize: function() {
this.model = new Backbone.Model({ message: 'Hello, World!' });
this.render();
},
render: function() {
this.$el.html(this.template(this.model.toJSON()));
return this;
}
});
$(document).ready(function() {
new AppView();
});
</script>
</body>
</html>
结论
总的来说,Backbone.js 是一个非常优秀的框架,特别适合与 Node.js 配合使用。它能够帮助开发者快速搭建结构化的前端应用。然而,在实际开发过程中,也需要考虑项目的具体需求,权衡利弊。希望各位开发者能够在实践中不断探索和优化,找到最适合自己的解决方案。
如果你做移动端html开发的话,backbone是个不错的选择。另外现在的页面都趋于简单化和模块化,用backbone 还是很不错的,我现在就用backbone+bootstrap作前端UI.
轻量级优点不敢苟同啊。。。我记得之前看过的backbone的介绍,说其实这是个比较重量级的框架。我之前实习的公司的一个产品使用backbone+requirejs做前端。感觉很不错。然后我们架构师说的最多的一句话就是:要养成面向模型编程的思想。。
真正业务复杂的项目还是最好不用这种框架性质的。框架再NB都有一套自己的规矩,就像你要做一辆车,但是他只能给你那种规格的轮子。业务复杂性的项目用工具不要用框架,特别是几个框架混用的时候带来的麻烦可真多。
REST 风格的 API, 上手不大习惯… 觉得面向对象还是比较重的, 条条框框很多
主要是数据解耦 碎片化
我是在做移动开发,感觉不错。但是觉得backbone也适用与桌面web开发。现在的客户端存储技术越来越多了,localstorage,cookie,Indexed Database.manifest,所以我觉得会有越来越多的逻辑层放到客户端去做,所以js mvc会越来越受欢迎,js的模块化是势在必行的、
我是指他的代码小压缩后不到7K,既然用mvc就不会只是给一个页面加个交互功能什么的。他已经上升到框架了。但是在框架来说它是轻量级的了,不知道我的观点对不。
我感觉像是重量级的。。
可以试试angularjs
是的,有业务去决定该采用什么框架,是否是多种框架混搭。同意你的观点
我也是,记得当初学php的zend framework时花了好大的劲取适应
这是永恒的话题啊。我目前采取的办法是用一个全局对象来做命名空间,去减少耦合性。不知道你自爱解耦上还有什么别的办法。小弟的工作组要是css切片,都是业余时间去学习js。所以很多东西都是知道不全面。我希望你和我谈谈你们在js解耦和碎片化的方法。谢谢
backbone入门成本有点高,如果之后招来的人不是geek犯的话 很容易给项目带来风险。
重复代码和其他框架重复的较多。
如果仅仅是想解耦,自己写点自定义事件就完了。。
不要跟风,web app优点教多,但是也不是必选,普通网站还是算了。。
underscore拿出来用用还不错。如果前端需要大量处理渲染数据的话。
AngularJS看着比Backbone简单。。。
我只能说Backbonejs是GUI Architect的真理,松散,简单,基于事件,扩展模块非常多。其他框架宣称的功能 AngularJS,emberjs也都各有优势,不过双向绑定,自动绑定这种看起来很美好的东西,并不是在所有类型的应用当中都适用。 你可以热爱真理,但是必须根据项目选择合适框架
有道理!谢谢!
Backbone最好的是它的每个设计。但是要构建自己的应用,没有必要什么都盲从它。
我的感觉就是oo ui之类的框架,完全破坏了编程的本质: 模块、算法。
Backbone.js 是一款经典的 JavaScript MVC 框架,它与 Node.js 结合使用可以构建出功能强大且易于维护的单页应用(SPA)。虽然现在流行的一些框架如 React 和 Vue 更为现代和高效,但 Backbone.js 在某些场景下依然有其独特的价值。
示例代码
假设我们正在创建一个简单的待办事项列表应用,结合 Express.js(Node.js 的 Web 应用框架)和 Backbone.js。
服务器端(Node.js + Express.js)
首先,我们需要设置一个简单的 Express.js 服务器来处理请求并提供数据。
const express = require('express');
const app = express();
const port = 3000;
app.use(express.json());
let todos = [
{ id: 1, title: 'Learn Backbone' },
{ id: 2, title: 'Build a Todo App' }
];
app.get('/api/todos', (req, res) => {
res.json(todos);
});
app.post('/api/todos', (req, res) => {
const todo = req.body;
todo.id = todos.length + 1;
todos.push(todo);
res.status(201).json(todo);
});
app.listen(port, () => {
console.log(`Server running at http://localhost:${port}`);
});
客户端(Backbone.js)
接下来,在客户端使用 Backbone.js 来管理模型、视图和路由。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Todo App with Backbone.js</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.9.1/underscore-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.4.0/backbone-min.js"></script>
</head>
<body>
<div id="todo-app">
<input type="text" id="new-todo">
<button id="add-todo">Add</button>
<ul id="todos-list"></ul>
</div>
<script>
const Todo = Backbone.Model.extend({});
const TodoList = Backbone.Collection.extend({
model: Todo,
url: '/api/todos'
});
const TodoView = Backbone.View.extend({
tagName: 'li',
events: {
'click .destroy': 'remove'
},
template: _.template('<%= title %> <button class="destroy">X</button>'),
initialize: function() {
this.render();
},
render: function() {
this.$el.html(this.template(this.model.toJSON()));
return this;
},
remove: function() {
this.model.destroy();
this.remove();
}
});
const AppView = Backbone.View.extend({
el: '#todo-app',
events: {
'click #add-todo': 'addOne'
},
initialize: function() {
this.collection = new TodoList();
this.collection.fetch();
this.collection.on('add', this.addOne, this);
this.collection.on('reset', this.addAll, this);
},
addOne: function(todo) {
let view = new TodoView({ model: todo });
$('#todos-list').append(view.render().el);
},
addAll: function() {
this.$('#todos-list').empty();
this.collection.each(this.addOne, this);
}
});
$(document).ready(function() {
const app = new AppView();
$('#add-todo').click(function() {
const title = $('#new-todo').val();
if (title) {
const todo = new Todo({ title: title });
app.collection.create(todo);
$('#new-todo').val('');
}
});
});
</script>
</body>
</html>
总结
这段代码展示了如何在 Node.js 环境中使用 Backbone.js 来创建一个简单的待办事项应用。尽管 BackBone.js 已经有些年头,但它仍然适用于需要简单、轻量级解决方案的项目。当然,对于更复杂的现代应用,你可能需要考虑使用更现代的框架,如 React 或 Vue。