cssmagic / action

Easy and lazy solution for click-event-binding.
95 stars 32 forks source link

API Documentation / API 文档 #9

Open cssmagic opened 9 years ago

cssmagic commented 9 years ago

如果你还不清楚这个库的用处,请参阅《简介》

术语约定

HTML 接口

页面中的 DOM 元素可以通过 data-action 属性来声明自己被点击时要执行的动作。比如点击下面的链接和按钮就可以分别触发名为 foobar 的动作(即执行对应的动作函数)。

<a href="#" data-action="foo">Link</a>
<button data-action="bar">Button</button>

(值得一提的是,动作函数将以触发元素作为执行上下文。这跟事件的回调函数是类似的。)

对于链接元素,你还可以这样声明它的动作(似乎看起来更有语义,对用户也更友好一些):

<a href="#foo" data-action>Link</a>

注意事项

JavaScript 接口

action.define(actions)

定义一个或多个动作。

参数

返回值

(无)

示例

以下代码将定义两个名为 foobar 的动作。

action.define({
    'foo': function () {
        alert('You triggered action `foo`!')
    },
    'bar': function () {
        this.bar = true
        alert('You triggered action `bar`!')
    }
})

注意事项


action.add() ⚠️

此方法系 action.define() 的别名。

⚠️ 注意:从 v0.4 起不建议使用 .add(),请使用 .define() 代替。


action.trigger(actionName, [context])

除了页面元素可以触发动作外,这个方法还允许你在 JS 代码中触发指定动作(甚至你还可以指定动作函数的执行上下文)。

这个方法可能并不常用,只是提供了另一种途径来调用你定义的动作。

参数

返回值

示例

如果你已经在上面定义了 foobar 两个动作,那么以下代码将会触发名为 foo 的动作。

action.trigger('foo')

以下代码将会触发名为 bar 的动作,而且动作函数将以 <body> 元素作为执行上下文(即函数内部的 this 在此次执行时会指向 document.body)。

//document.body.bar === undefined
action.trigger('bar', document.body)
//document.body.bar === true

注意事项

antife-yinyue commented 9 years ago

为什么到处都有 !#

cssmagic commented 9 years ago

对于链接元素,可以用 href 属性来声明动作名。而此时 href 值通常是个 hash,需要把 # 过滤掉;滤 hash 就顺便滤一下 hashbang。由于链接的 href 值(动作名)可能不经修改就被复制到了别处,所以各处都会滤一下这些特殊字符。

简而言之,这是一个容错机制。这些过滤对日常开发几乎没有影响,应该不会有人特意用这些特殊字符来命名或区分动作名吧。

目前是这样设计的。如果觉得不妥,请开个 issue 详细讨论。谢谢。