新的功能:$(元素).clickToEdit(回傳函式)
不過不會將文字變成 input 就是了,倒是要先用一個 div 把文字包起來,
然後 click 的時候會將 div 變成像文字框的樣式(就是 Tocas 中的 .tb),一旦使用者編輯完後會變回 div,
然後「自動回傳文字」,算是變相的 .. 簡易使用方法吧。
其實這個功能是看到這一篇「Backbone 的 View」有感而發的,
在 Backbone.js 裡面這裡的範例是這樣:
events:
{
"click #add-friend": "showPrompt",
"click .delete" : "delete_li"
}
我想說:「喔?還不錯。」
然後就打算自己也在 Tocas 加了一個類似的功能,不過寫法不同,
因為看起來 Backbone.js 是透過「空白」來區隔「事件」跟「元素」的,
但是我想說有時候可能會加很多「事件」,有時候可能會有很多「元素」,或者很多「回傳」。
所以我後來研發出來的寫法是這樣:
$.binder = function(Binds)
{
for(var i in Binds)
{
/** Split the event and the target first */
var Splits = i.split('|'),
/** The first array is events */
Events = Splits[0],
/** Split the targets */
Targets = Splits[1].split('&')
/** Each target */
for(var t in Targets)
if(Binds[i].isArray)
/** Bind each callback if it's a callback array */
for(var f in Binds[i])
$(Targets[t]).on(Events, Binds[i][f])
else
$(Targets[t]).on(Events, Binds[i])
}
}
$.binder
({
'click | img & a' : meow.addNew,
'mouseover | img' : meow.removeNew
})
翻譯成中文可以像這樣
$.binder
({
'事件 事件 事件 | 元素 & 元素' : 回傳,
'事件 | 元素' : [回傳, 回傳]
})
所以你可以有多個事件,或是多個元素,甚至多個回傳(用陣列包起來)。
看起來至少比下面的一般 $.on 還要好多了 ..