写点什么

Ampersand.js:与 Backbone.js 相媲美的一套全新的“不像框架的框架”

  • 2014-07-03
  • 本文字数:1431 字

    阅读完需:约 5 分钟

&yet 发布了用于构建 JavaScript 应用的“不像框架”的框架 Ampersand.js 。其灵感主要来自 Backbone.js ,但与 Backbone.js 的主要不同之处在于,Ampersand.js 更加模块化,并添加了更多的(完全可选的)特性。

在其博客上的发布公告中,&yet 谈到了他们在 Backbone.js 方面的深度投入,以及为何他们最终决定摆脱 Backbone.js,构建自己的框架:

我们在 &yet 所遇到的问题之一——特别是在开发大型 Backbone 应用时——是缺乏健全的方式,来记录模型应该包含的属性的类型。

在默认条件下,Backbone 的模型并不强制要求任何结构。我们无须在任何地方声明我们将要存储哪些属性。因此,毫无疑问人们将会在视图里的某个地方,把各种混杂的属性保存到模型里。而这将不利于新接手的开发人员阅读模型,并确切地掌握正在跟踪哪些状态。

为了解决这个问题并强制运用结构,我编写了一个名为“HumanModel”的替代模型。该模型与《Human JavaScript》一书中全面探索的哲学一致。现在,它已经演变为 Ampersand 模型 (ampersand-model)。它会强制要求开发者声明将要存储的属性,同时允许开发者声明衍生的属性。

最初,我们在 Backbone 的集合里使用我们的替换模型,但是在这一过程中我们逐渐遇到了问题。一般来说,Backbone 认为开发者将把 Backbone.Model 模型存储到集合中。因此如果视图将实例化模型存储在集合中,Backbone 将无法将它识别为模型。我对 Backbone 打补丁并解决了该问题,但我还希望在其他许多领域里获得更高的灵活性。

对于 Backbone,&yet 认为一个关键问题是它的特性捆绑:&yet 的应用需要更高的灵活性,以便切入、切出特性。于是在 Ampersand.js 中,每个功能片都被组织到其自身的 CommonJS 模块中。这些模块通过 node.js 的包管理器 npm 分发和管理,并使用 Browserify 来将它们“编译”成单独的(或许也是最小化的)JavaScript 文件,以便在浏览器中运行。因此,任何应用都可以只选择自己需要的模块,并且能够轻易地与来自 NPM 的任何其他模块结合。

目前,Ampersand.js 由大约二十几个独立特性组成,托管在Github 上面独立的代码仓库中,同时它还提供了一套命令行工具,能够便捷地使用&yet 的推荐结构来创建Ampersand.js 项目,并为表单、视图、集合和模型生成额外的页面框架(脚手架)。

Ampersand.js 中最重要的模块(它们的文档或许也是最完善的)包括:

ampersand-state :与 Backbone.js 的模型类似,但它们没有与 RESTful 服务进行任何形式的绑定。这一功能被添加在 ampersand-model 中。开发者可以对状态类中的属性赋予类型,并在赋值的时候检查这些类型。

ampersand-model :通过添加与服务器交互,来处理加载、保存和对象同步的方法,对 ampersand-state 进行扩展。

ampersand-collection :除了不提供加载或保存集合的方法外,它与 Backbone.js 的集合等价。

ampersand-rest-collection :扩展了 ampersand-collection,增加了将某个集合加载并保存到某个 RESTful 服务的方法。

ampersand-view :类似于 Backbone.js 的视图,它是一套用于将模型绑定到 DOM 节点的机制。

ampersand-form-view :用于便捷地使用数据绑定来构建一致的表单的模块。

ampersand-router :用于更新浏览器中的 URL 的模型,而且它的更新并不会实际加载页面。该模块中的许多代码来自 Backbone.js,并做了一些扩展。

对任何熟悉 Backbone.js 的人来说, Ampersand.js 都应该很容易上手。它在 Github NPM 上基于 MIT 许可发布。

查看英文原文: Ampersand.js: a New “Non-Frameworky Framework” to Rival Backbone.js

2014-07-03 04:172412
用户头像

发布了 256 篇内容, 共 83.5 次阅读, 收获喜欢 10 次。

关注

评论

发布
暂无评论
发现更多内容

LED显示屏价格与品质哪个更重要

Dylan

LED LED显示屏 led显示屏厂家

IP地址和MAC地址都可以确定目标地址,为什么二者都在使用,舍弃一个是否可行?

阿柠xn

Mac IP 网络 协议族 9月月更

玩转 Flowable 流程实例

江南一点雨

Java springboot workflow flowable

公司用的堡垒机叫什么?多少钱?

行云管家

网络安全 堡垒机 等级保护 过等保

2022届秋招Java岗高频面试题盘点,老司机也未必全会,真的太卷了

钟奕礼

Java 面试 java;

深入剖析nodejs中间件

coder2028

node.js

2022第三届云原生编程挑战赛--Serverless VSCode WebIDE使用体验

六月的雨在InfoQ

Serverless 边缘容器 9月月更 Serverless VSCode WebIDE 线上ide

手写vue-router核心原理

hellocoder2029

Vue

idea 远程开发 client

黄敏

HTTP - TLS1.3 初次解读

懒时小窝

中心化决议管理——云端分析

字节跳动终端技术

ios 研发效能 CocoaPods 制品库 云化服务

为什么大数据工程师比数据科学家的需求更大

雨果

数据工程师

50道Java集合高频面试题,看完面试成功率99%

钟奕礼

Java 面试 java;

EMQ荣获工信部第五届“绽放杯”5G应用征集大赛智慧金融专题一等奖

EMQ映云科技

5G 物联网 IoT 数智化 9月月更

总览 Java 容器--集合框架的体系结构

钟奕礼

Java 面试 java;

数据API开发如何快速上手:先了解什么是数据API生命周期管理

雨果

API 数据api

阿里云服务器ECS基本操作指南

六月的雨在InfoQ

阿里云 SSH xshell 云服务器ECS 9月月更

模块一作业

Geek_1264yp

java基础面试题

钟奕礼

编程 java;

600+ 道 Java面试题及答案整理(建议收藏)

钟奕礼

Java 面试 java; Java 面试题

一比一手写迷你版vue,彻底搞懂vue运行机制

hellocoder2029

JavaScript

组装式交付-云巧 知多少

六月的雨在InfoQ

9月月更 云巧 组装式交付 云巧资产 云巧工坊

架构实战训练营模块1作业--开启架构之旅

阿姆斯壮

架构实战营 #架构实战营

【Java深入学习】并发常见方法的注意事项

钟奕礼

Java 面试 java;

想从事运维岗位应该学习什么技能?谁能告诉一下?

行云管家

运维 网络运维 IT运维

时隔一年多 jQuery 再度发布 3.6.1 新版本,你还在用JQ吗?

茶无味的一天

JavaScript 前端 框架 ​jQuery

Java | this和super关键字【深入理解子类和父类的继承关系】

Fire_Shield

super this 9月月更

SAE 助力贵州酒店集团从容支撑贵州特产抢购

阿里巴巴中间件

阿里云 Serverless 云原生 SAE

概述数据交换的构建策略

穿过生命散发芬芳

数据交换 9月月更

Java开发5年,复习1个月成功上岸京东物流,面试和复习思路分享

钟奕礼

Java 面试 java;

字节半天*3面/5天拿offer,全凭自身硬实力和这份Java面试笔记

钟奕礼

Java 面试 java;

Ampersand.js:与Backbone.js相媲美的一套全新的“不像框架的框架”_JavaScript_Zef Hemel_InfoQ精选文章