被自己侷限住?設計元素 Tocas 問題。

其實以前開發了一套類似 BootStrap 的設計介面元素,

叫做 Tocas,你可以按下這裡觀看原始碼

如果你還是不清楚這是什麼的話,就是給網頁用的 CSS 樣式表,

可以輕鬆做出像下面這樣的效果(Tocas 2 Beta)

registration

那不是很簡單嗎?

輕輕鬆鬆靠了幾個用法就可以做出自己想要的畫面,

這個問題就在這邊,Tocas 是一套規則,而不是可自由變化的變形蟲


有了規則之後,迎來的就是毀滅。

谷阿莫雖然很廢話,但有時候他說的話也是可以令人參考的,我會建議你看完露西最後面那段

然後其實看完之後你可能會發現跟我這個文章根本沒關係。

Tocas 是一套規則,那基本上也沒什麼困難的,只要按照規則走,就沒有問題了,

但是 TeaMeow 要用到的 Tocas 部分越多,問題也就越來越浮現。


按照規則,還是更客製化?

s

TeaMeow 有很多地方不是 Tocas 能用上用場的,

例如說背景顏色,不一定能夠與 Tocas 相符,Tocas 可能採用灰色底,

但是如果 TeaMeow 要白色的時候怎麼辦呢,在去生一個「白色背景的 Tocas」嗎。


還沒完善

d

其實 Tocas 本身就是一個還沒完成的產品(但是 TocasJS 已經差不多定型了)

所以經常修改這裡,修改那裡的,我還在想說是不是應該要花多一點時間來讓他更加完善 ..

不然平常都是改一下,然後要用的時候又改一下(搞到最後都亂了)。


結論

螢幕快照 2015-09-01 下午3.09.50

其實 Tocas 在不注重整體環境下,

只根據 Tocas 本身提供的元件做出來的效果是很優秀
(這點我真的不唬爛。)

所以仔細想想,作為獨立元件,好像才是 Tocas 原本的理念,

也就是說把 Tocas 當作按鈕、文字框的樣式提供者

然後套用上 TeaMeow 的自訂顏色,一切看似好像都會解決,

但是我懂,等開始寫程式的時候,一定不會這麼順暢。

結論?又有的忙惹。

Tocas 現在支援點擊編輯 .. ?

螢幕快照 2015-09-12 下午5.36.52

新的功能:$(元素).clickToEdit(回傳函式)

不過不會將文字變成 input 就是了,倒是要先用一個 div 把文字包起來,

然後 click 的時候會將 div 變成像文字框的樣式(就是 Tocas 中的 .tb),一旦使用者編輯完後會變回 div,

然後「自動回傳文字」,算是變相的 .. 簡易使用方法吧。

螢幕快照 2015-09-12 下午5.38.51

Tocas 的新功能 「Binder」

螢幕快照 2015-08-20 下午2.18.01

其實這個功能是看到這一篇「Backbone 的 View」有感而發的,

在 Backbone.js 裡面這裡的範例是這樣:

events:
{
    "click #add-friend":  "showPrompt",
    "click .delete"    :  "delete_li"
}

我想說:「喔?還不錯。」

然後就打算自己也在 Tocas 加了一個類似的功能,不過寫法不同,

因為看起來 Backbone.js 是透過「空白」來區隔「事件」跟「元素」的,

但是我想說有時候可能會加很多「事件」,有時候可能會有很多「元素」,或者很多「回傳」。


 

Tocas 做法

所以我後來研發出來的寫法是這樣:

$.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
({  
    '事件 事件 事件 | 元素 & 元素' : 回傳,
    '事件          | 元素'       : [回傳, 回傳]
})

所以你可以有多個事件,或是多個元素,甚至多個回傳(用陣列包起來)。


 

比照圖

螢幕快照 2015-08-20 下午2.18.01

看起來至少比下面的一般 $.on 還要好多了 ..

螢幕快照 2015-08-20 下午2.10.21