首页
/ SpacePen 技术文档

SpacePen 技术文档

2024-12-28 09:35:00作者:韦蓉瑛

本文档旨在帮助用户详细了解并使用 SpacePen 库,内容包括安装指南、项目使用说明以及项目 API 使用文档。

1. 安装指南

SpacePen 是一个不再维护的库。版本 5.x 设计为直接包含在 1.0 兼容的 Atom 包中。如果您需要 SpacePen 3.x,它在 Atom Core 中使用,请查看 3.x 分支

2. 项目的使用说明

SpacePen 是一个强大但最小化的客户端视图框架,适用于 CoffeeScript。它将“视图”和“控制器”合并为一个单一的 jQuery 对象,其标记是用类似于 Ruby 中的 Markaby 的嵌入式 DSL 表示的。

基础使用

视图对象从 View 类扩展,并在 @content 类方法中有 HTML 内容的嵌入式标记 DSL:

class Spacecraft extends View
  @content: ->
    @div =>
      @h1 "Spacecraft"
      @ol =>
        @li "Apollo"
        @li "Soyuz"
        @li "Space Shuttle"

视图继承自 jQuery 的原型,因此构建视图时可以像使用 $(...) 创建的 DOM 片段一样调用 jQuery 方法。

view = new Spacecraft
view.find('ol').append('<li>Star Destroyer</li>')

view.on 'click', 'li', ->
  alert "They clicked on #{$(this).text()}"

SpacePen 视图比普通的 jQuery 片段更强大,因为它们允许定义自定义方法:

class Spacecraft extends View
  @content: -> ...

  addSpacecraft: (name) ->
    @find('ol').append "<li>#{name}</li>"

还可以在构造时传递参数,这些参数会传递给 @content 方法和视图构造器。

class Spacecraft extends View
  @content: (params) ->
    @div =>
      @h1 params.title
      @ol =>
        @li name for name in params.spacecraft

view = new Spacecraft(title: "Space Weapons", spacecraft: ["TIE Fighter", "Death Star", "Warbird"])

可以使用 super 优雅地覆盖 jQuery 原型的方法:

class Spacecraft extends View
  @content: -> ...

  hide: ->
    console.log "Hiding Spacecraft List"
    super()

如果覆盖视图类的构造器,确保调用 super。或者,可以定义一个 initialize 方法,构造器会自动调用它,并传递构造器的参数。

class Spacecraft extends View
  @content: -> ...

  initialize: (params) ->
    @title = params.title

出口和事件

SpacePen 会自动为具有 outlet 属性的任何元素创建命名引用。例如,如果 ol 元素具有 outlet=list 属性,视图对象将有一个指向 ol 元素 jQuery 包装器的 list 条目。

class Spacecraft extends View
  @content: ->
    @div =>
      @h1 "Spacecraft"
      @ol outlet: "list", =>
        @li "Apollo"
        @li "Soyuz"
        @li "Space Shuttle"

  addSpacecraft: (name) ->
    @list.append("<li>#{name}</li>")

元素还可以具有事件名称属性,其值引用自定义方法。例如,如果一个 button 元素有一个 click=launchSpacecraft 属性,那么当点击按钮时,SpacePen 将在按钮的父视图上调用 launchSpacecraft 方法:

class Spacecraft extends View
  @content: ->
    @div =>
      @h1 "Spacecraft"
      @ol =>
        @li click: 'launchSpacecraft', "Saturn V"

  launchSpacecraft: (event, element) ->
    console.log "Preparing #{element.name} for launch!"

3. 项目 API 使用文档

标记 DSL 细节

标记方法 (@div, @h1, 等.)

如前所示,标记 DSL 非常简单。从 @content 类方法或它调用的任何方法中,只需调用名为所需 HTML 标签的实例方法。可以传递三种类型的参数给标记方法:

  • 字符串:字符串将进行 HTML 转义并用作生成标签的文本内容。

  • 哈希:键值对将用作生成标签的属性。

  • 函数(使用 => 绑定):函数将在打开和关闭标签之间调用,以生成 HTML 元素的内

热门项目推荐
相关项目推荐

项目优选

收起
Python-100-DaysPython-100-Days
Python - 100天从新手到大师
Python
373
72
HarmonyOS-ExamplesHarmonyOS-Examples
本仓将收集和展示仓颉鸿蒙应用示例代码,欢迎大家投稿,在仓颉鸿蒙社区展现你的妙趣设计!
Cangjie
276
72
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
200
47
xzs-mysqlxzs-mysql
学之思开源考试系统是一款 java + vue 的前后端分离的考试系统。主要优点是开发、部署简单快捷、界面设计友好、代码结构清晰。支持web端和微信小程序,能覆盖到pc机和手机等设备。 支持多种部署方式:集成部署、前后端分离部署、docker部署
HTML
5
1
LangChatLangChat
LangChat: Java LLMs/AI Project, Supports Multi AI Providers( Gitee AI/ 智谱清言 / 阿里通义 / 百度千帆 / DeepSeek / 抖音豆包 / 零一万物 / 讯飞星火 / OpenAI / Gemini / Ollama / Azure / Claude 等大模型), Java生态下AI大模型产品解决方案,快速构建企业级AI知识库、AI机器人应用
Java
10
3
gin-vue-admingin-vue-admin
🚀Vite+Vue3+Gin的开发基础平台,支持TS和JS混用。它集成了JWT鉴权、权限管理、动态路由、显隐可控组件、分页封装、多点登录拦截、资源权限、上传下载、代码生成器【可AI辅助】、表单生成器和可配置的导入导出等开发必备功能。
Go
16
3
source-vuesource-vue
🔥 一直想做一款追求极致用户体验的快速开发平台,看了很多优秀的开源项目但是发现没有合适的。于是利用空闲休息时间对若依框架进行扩展写了一套快速开发系统。如此有了开源字节快速开发平台。该平台基于 Spring Boot + MyBatis + Vue & Element ,包含微信小程序 & Uniapp, Web 报表、可视化大屏、三方登录、支付、短信、邮件、OSS...
Java
24
2
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
898
0
madongmadong
基于Webman的权限管理系统
PHP
4
0
cool-admin-javacool-admin-java
🔥 cool-admin(java版)一个很酷的后台权限管理框架,Ai编码、流程编排、模块化、插件化、CRUD极速开发,永久开源免费,基于springboot3、typescript、vue3、vite、element-ui等构建
Java
18
2