2013年12月15日星期日

使用Eclipse編譯PhoneGap/Cordova 3.3.0

PhoneGap/Cordova推出了3.3.0的更新,但更新後Eclipse需要作額外的設定才可以正常編譯。

更新流程:
  1. 更新PhoneGap
    • Mac and Linux:
      $ sudo npm install -g phonegap
    • Windows:
      C:\> npm install -g phonegap
  2. 更新App
    $ cd path/to/my-app
    $ phonegap platform update android
  3. 在Android SDK  Manager安裝Android 4.4 (API 19)的SDK Platform
  4. 在platforms/android/CordovaLib/src資料夾按右鍵 -> Build Path -> Use as Source Folder
  5. 重新開啟Eclipse後就能正常編譯
p.s. 你可能需要建立一個新的App來取得最新的phonegap.js / cordova.js / cordova_plugins.js

發行說明: http://phonegap.com/blog/2013/12/13/phonegap-release/

2013年12月13日星期五

Foundation 5 - 固定Off Canvas標題在頁首的方法

Foundation 5新增的Off Canvas可以擬模側滑菜單的效果,但在性能較差的手機上會出現延遲的問題,因為它會將整個頁面以CSS transform的translate3d移動,其實大部分情況只需要顯示菜單,所以可以將Off Canvas和Top Bar整合,請看以下的實例:

CSS transform: http://www.w3schools.com/cssref/css3_pr_transform.asp
Foundation 5 Off Canvas文檔: http://foundation.zurb.com/docs/components/offcanvas.html

Js Fiddle示範: http://jsfiddle.net/indream/hSu4c/

1. 先將div.tab-bar加上top-bar class,並以div.fixed包住。

<div class="fixed">
 <nav class="tab-bar top-bar">
  <section class="left-small"> <a class="left-off-canvas-toggle menu-icon"><span></span></a></section>
  <section class="middle tab-bar-section">
   <h1 class="title">Foundation</h1>
  </section>
  <section class="right-small"></section>
 </nav>
</div>
2. 加入以下的CSS

/* 下移.top-bar擋住的文字 */
body {
  margin-top: 2.8125rem;
}
/* 修正被.exit-off-canvas擋住的菜單 */
.fixed, .left-off-canvas-menu {
    z-index: 1003;
}
.move-right .left-off-canvas-menu {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
    left: 0;
}
.left-off-canvas-menu {
    -webkit-transform: translate3d(-100%, 0, 0);
    transform: translate3d(-100%, 0, 0);
    left: -100%;
    /* 可以在此修改Off Canvas動畫的時間 */
    -webkit-transition: 0.5s;
    transition: 0.5s;
}
.move-right>.inner-wrap {
    -webkit-transform: none;
    transform: none;
}
.move-right a.exit-off-canvas {
    -webkit-transition: none;
    transition: none;
}

3. 頁面載入後執行以下的JS

$(document).foundation();
// 將Off Canvas設為頁面的高度,並在開啟時固定在頁面中央
$(".inner-wrap, .left-off-canvas-menu, .main-section").height($(window).height() - $(".fixed").height());

2013年8月17日星期六

Bootstrap 3.0 (RC2) 過渡筆記

Bootstrap簡介

Bootstrap是一個十分方便的網頁模板,除了統一個版面樣式,
它亦提供不同的工具,例如對話窗(Modal)、下拉選單(Dropdown)、分頁(Tab)等,
可算是集百家之大成,適合開發小型網站。

Bootstrap 3.0

Bootstrap 3.0把整個框架重製,核心的網格系統(Grid System)必須更新,
這篇筆記主要記錄重大的改變,以及如何在新版本實現舊功能。

可以到這個pull了解最新消息: https://github.com/twbs/bootstrap/pull/6342
預覽Bootstrap 3.0: http://getbootstrap.com/
實作示例: http://examples.getbootstrap.com/
下載:  RC2 或 最新編譯版本 (2013-08-16 15:32:18-07:00 16d5e1b)

2013年6月17日星期一

【Ember.js】使用History.js讓瀏覽器支援history API

簡介:

Ember.js的Router提供了不同的Location API,history API是其中之一

使用它的好處為網址中沒有 /#/ ,除了能把路徑傳至伺服器作預先處理,
亦可以被搜尋引擎索引,實例可參考 Discourse 或 Ember.js Forum

使用history API時的問題:

但由於很多用戶使用舊的瀏覽器,例如 IE 6 - IE 9等,
為了確保他們能正常使用,所以需要使用polyfill - History.js

專案網站:https://github.com/browserstate/history.js/
直接下載:native.history.js

2013年6月15日星期六

【Ember.js入門 2.1】模板: Handlebars基礎

Handlebars基礎

Ember.js使用 Handlebars模板庫 來增強用戶介面。
Handlebars與普通HTML相似,但提供了能改變顯示內容的嵌入表達式 (embed expressions)。
渲染模板後,不需要額外的代碼,內容就能自動更新。

如果你習慣基於縮排的語法,可以熟習Handlebars後嘗試 Emblem.js

2013年5月20日星期一

【Ember.js入門 1.2】應用程式: 應用模板

應用模板

應用開始時,預設的模板就是應用模板

你應該將頁首(header)、註腳(footer)和其他裝飾性內容放進此模板。
另外,至少放置一個{{outlet}} :一個佔位符,讓路由器根據應用當前的狀況,渲染適合的模板。

【Ember.js指南 1.1】應用程式: 介紹

建立一個應用程式

首先,要建立一個Ember.Application的實體:
window.App = Ember.Application.create();
我們把應用命名為App,你亦可以改一個有意義的名字。

擁有一個應用物件(Object),有幾個重要的原因:
  • 它是應用的命名空間(namespace),應用的所有類(classes)都是這物件的屬性(properties)。如:App.PostsViewApp.PostsController。這能避免全域變數的污染。
  • 它幫你監聽網頁的事件,並負責傳送事件到視圖。
  • 它會自動渲染應用模板—─模板的基礎/根,其他模板都會渲染到此模板
  • 它會自動建立路由器,並基於目前的URL進行路由。
翻譯自:http://emberjs.com/guides/application/
參考:http://emberjs.cn/guides/application/

2013年5月16日星期四

【Ember.js指南 序二】命名慣例

為了統一整個應用程式,Ember.js規定了各元素的命名慣例。

應用程式

假設你把網站命名為 App ,當Ember.js初始化時,將首先尋找以下的物件(Object):
  • App.ApplicationRoute
  • App.ApplicationController
  • application/未有命名的 模板 (模板將於第三部分介紹)
Ember.js首先會渲染application作為主模板,並將其連結至App.ApplicationController(如有設置),這樣模板就可以使用ApplicationController的屬性。

2013年3月11日星期一

Ember.js 新手指南【序】


一直都想寫一篇有關Ember.js的新手文章,源於起步時面對無數的困難,苦閱無數英文的教學都無法解決的辛酸。但因為API一直變動,終於等到1.0 RC API Freeze,Router V2完成了,廢話就不多說,首先介紹一下甚麼是Ember.js。

註1:因為我討厭看長篇大論的文章,所以內容可能比較精簡,有甚麼問題可以留言詢問。
註2:◣◥ 中的翻譯為非正式譯名,重要名詞大多使用英文原詞
資料來源:
http://emberjs.com/guides/concepts/core-concepts/
http://www.adobe.com/cn/devnet/html5/articles/flame-on-a-beginners-guide-to-emberjs.html


核心概念

介紹

Ember.js是一個Javascript MVC (Model View Controller的簡寫) 框架:

Model - 模型:儲存從伺服器獲得的數據
View - ◣視圖◥:處理模板及使用者在頁面的互動
Controller - 控制器:管理多個模型,並將資料傳遞至模板

使用MVC框架的好處為:方便組織和管理,提升更新/增加功能時的效率

Template - 模板

上文提及的「模板」,以Handlebars編寫,亦是Ember.js的主要元素。
Handlebars在基本的HTML上,加上不同的輔助工具 (helper),大致分為:
  • Expressions - 表達式:{{property}} 表示模型物件的屬性
  • 功能類:如 {{if}} {{each}} {{action}} 等
  • Outlets - ◣插座◥:{{outlet}} 預留位置,用作轉換不同模板
  • Views - 視圖:{{view name}}  插入視圖至模板中

Router - 路由器

頁面上的互動,或稱為狀態的管理就由路由器來負責。
簡單來說是跟據網址 (URL) 建立模型(Model),顯示相關的模板。