首页
/ SpacePen 技术文档

SpacePen 技术文档

2024-12-28 20:36:03作者:韦蓉瑛

本文档旨在帮助用户详细了解并使用 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 元素的内

登录后查看全文
热门项目推荐