本文為使用 Rails ActiveStorage 的實作範例筆記。詳細介紹請參考Active Storage 概要,本文僅針對官方教學提供一個對照的實作記錄,如需部署至 Heroku 請參考在 Heroku 使用 Active Storage。
1 | # Last few parameters(--skip-* part) is only my habbit not actully required |
要理解 Vue 轉場與動畫的運作,首先我們需要具備 CSS transitions 和 animations 的基本知識。
這邊我們不會完整交代所有的教學,而是重點式的節錄。
讓我們先從 transitions 開始,transitions 中文我們可以稱為轉場,其主要的意思定義 CSS 樣式產生變化時,兩者之間的轉換效果,所謂的轉換效果指的是變化的長度時間,延遲時間,時間控制函式(timing-function)。
舉例來說:
身為前端或 Javascript 的開發者我們或多或少都曾經受到 JavaScript Modules
這個巨大的概念所困擾了。
我們都想清楚的理解到底該怎麼使用這些工具以及它們到底在我們的日常開發中扮演什麼角色。
ECMAScript 5 延續了 ECMAScript 3 增加了新的功能。在規範中也介紹了一些新的 API 其中相對實用的功能
莫過於對於物件屬性的改進。這些新的功能讓我們能夠更進一步的控制使用者使用物件的方式,例如:替物件增加 getter
, setter
,設定可列舉屬性,限制動態 刪除
, 增加
屬性的用法,設定成唯讀物件等等。
而最棒的是上面說的這些功能大部分主流的瀏覽器都已經支援了,目前 ECMA-262 已經來到第八版。接下來就讓我們來學習這些新的功能。
最近花了些時間搜尋、研究 Node.js/Express.js 有關驗證機制的教學。大部分的文章要不是不夠完整,要嘛就是在安全性的部分有錯,並可能造成用戶潛在的風險。
這篇文章預計要探討這些常見驗證機制的問題、陷阱,以及點出該如何避免發生。同時也檢視一下自己閱讀或寫作的教學。在撰寫文章的同時我仍然在尋找更穩固的全方位驗證方案(會員功能)。
同時我也希望可以找到 Nodejs/Express.js 中可以和 Rails 的 Devise 匹敵的方案。
這邊文字要講的是關於使 instanceof
可適用於更多的情形下。
在 javascript 中,當我們需要確認一個值的型別時,我們就必須要選擇對應的方法。大略來說:
typeof
檢查某值是否為某種原生型別1 | if (typeof value === 'string') |
instanceof
用來檢查某個值是否為某 class 的實例物件或建構函式。1 | if (value instanceof Map) |
除此之外,value.constructor
和 value.constructor.name
偶爾也可以派上用場。
光是檢查原生型別和物件的方式不一樣這樣就已經非常不理想了,然後在加上 javascript 一些詭異的行為就讓事情變的更加複雜
typeof null
為 object
並不是 null
。(typeof undefined -> undefined)typeof
區分 object
和 function
,而兩者都是一種物件上面這兩個詭異的行為導致沒有簡單方式直接拿 typeof 來檢查是否為物件
Object
的物件實例1 | > Object.create(null) instanceof Object |
使用特定的 PrimitiveNumber
類別,下面的程式碼可以讓 expression 表達式 x instanceof PrimitiveNumber
為 true。
而能夠辦到這樣的原因是因為我們使用 Symbol.hasInstance
實作了 PrimitiveNumber 的 static method 靜態方法。
關於 Symbol.hasInstance。
簡單說就把 Symbol.hasInstance
當作 method 的 key 就是提供我們客製 instanceof 行為的方法。
1 | class PrimitiveNumber { |
TypeRight 是一個微型的函式庫用來檢查動態型別,另外它使用上面說明的方式實作。其 instanceof 運算子
如下
TypeRight 目前並不提供物件
檢查的型別(PrimitiveObject) 不過您可以輕易的加入。
通過這些基本的功能,我們可以使用 TypeRight
檢查函式的參數是否正確
1 | import * as tr from 'type-right' |
目前有兩個提案
跟處理檢查型別有關的功能,正處於 stage 0 的狀態
這個提案
稱為 ECMAScript Pattern Matching Syntax 是 Brian Terlson 和 Sebastian Markbage 提出的。
其中最主要的是 Symbol.matches 的概念,其大概的使用方式入下
1 | class PrimitiveNumber { |
這個提案是由 James M Snell 提出的。
Builtin.is(value1, value2)
可以檢查 value1
和 value2
是否參考同一個 constructor。這個提案也考慮到了其他面向的問題
1 | > Builtin.is(Date, vm.runInNewContext('Date')) |
而 Builtin.typeOf()
看起來就像是 typeof
的擴展,同時支援原生型別和內建的 class
1 | Builtin.typeOf(undefined); // 'undefined' |
很長一段時間在 javascript 專案,文件的部分並沒有什麼好用的工具。JSDoc 大概是這個領域中唯一的競爭者,並且其設計中有些非常不錯的地方:
在 Javascript 不斷快速變化的今日,對 Rails 而言一直有個相對支援度較不足的地方,那就是支援一些較新的 Javascript 封裝機制(bundle)。不過從 5.1 開始這個大家希望的功能將會支援 - 全新的 webpacker gem。
Rails 5.1 開始內建可以使用 --webpack
參數開啟支援 webpacker
和 yarn
,並且支援整合 React
,Angular
,Vue
,elm
等。