Skip to content

a2chub/SNBinder

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

about SNBinder

SNBinder はJavaScriptで実装されたクライアントサイドのテンプレートエンジンです。サーバーサイドのテンプレートエンジンと同じようなものです。view(HTML template)がJavaScriptオブジェクトのデータを用いてHTML textを生成します。

0. デザイン原理とサンプルアプリケーション

SNBinderでは、クライアントサイドのデータバインディングという方法が非常に柔軟な開発環境に一役買っており、それによってデスクトップアプリケーションのようなユーザー体験をもたらすことができます。興味があれば以下の記事を御覧ください。

http://www.facebook.com/note.php?note_id=179569622077334

このライブラリを使用したデモアプリ "Fruence (facebookユーザのためのグループウェアアプリ)" を作成しました。

http://www.fruence.com

1. 初期化について

SNBinder はjQueryを必要とします。また、SNBinderをロードする前に必ずjQueryをロードしてください。

JQueryとSNBinderのロードが完了したら、"init"メソッドを呼び出し初期化を行って下さい

$(document).ready(function() {
    SNBinder.init({});
}

初期化メソッドは、いくつかのオプションがあります。"6. 初期化(アドバンス)"セクションを参考にしてください。

2. バインディング

JavaScriptをHTML templateに埋め込むには、SNBinder.bind()メソッドをコールします。:

var template = "<p>Hello $(.name)!</p>";
var user = { "name":"Leonardo da Vinci" };
$('.body').htm(SNBinder.bind(template, user));

このサンプルでは、<body>タグ内に"<p>Hello Leonardo da Vinci!</p>" が表示されます。

もし複数のオブジェクトに同じテンプレートを適用したいのならば、コンパイル済みの形式を使用して変数を展開します。:

var template = "<p>Hello $(.name)!</p>";
var apply_template = SNBinder.compile(template);
var user1 = { "name":"Leonardo da Vinci" };
var user2 = { "name":"Michelangelo di Lodovico Buonarroti Simoni" };
$('.div#user1').htm(apply_template(user1));
$('.div#user2').htm(apply_template(user2));

もちろん、配列にテンプレートを埋込むことも可能です:

var template = "<li>Hello $(.name)!</li>";
var users = [
    { "name":"Leonardo da Vinci" },
    { "name":"Michelangelo di Lodovico Buonarroti Simoni" },
    { "name":"LDonato di Niccol嘆 di Betto Bard" }
];
$('.ul').htm(SNBinder.bind_rowset(template, users);

以下の様な、テンプレートの置換も可能です:

$(.foo) will be replaced by the value of property "foo" (escaped)
$(_foo) will be replaced by the value of property "foo" (non-escaped)
$(index) will be replaced by the index (in case or bind_rowset)

3. テンプレートの読み込み

上述のサンプルコードのように、javascriptの中にハードコーディングしたHTMLテンプレートを埋め込みたいこともあるでしょう。しかし、Viewと制御部分(javascript)をごちゃ混ぜにするのはあまりよくありません。そこで、SNBinderでは、2つの補助関数を提供します。これらを使用することで、一度のHTTP GETに対して複数のテンプレートを読み込むことが可能になります。

SNBinder.get_sections(url, callback)
SNBinder.get_named_sections(url, callback)

get_sectionsで読み込むことにより、テンプレートバンドル、すなわち"{%}"で繋がれたテンプレート列が任意のURLから読み込みまれます。そしてテンプレート列を含むコールバック関数が返されます。

また、get_named_sectionsによって"{%}...{%}"で特定される名前を持つテンプレートのバンドルも読み込まれ、テンプレートの辞書、 すなわち以下のようなテンプレートバンドルを含むコールバック関数が返されます。

{%}main{%}
<p>Hello $(.name)!</p>

次のコードは上記テンプレートバンドルを読み込み、Section2で記述された内容をバインドしたviewデータと同等の振るまいをします。

SNBinder.get_named_sections("/static/templates.htm", function(templates) {
    var user = { "name":"Leonardo da Vinci" };
    $('.body').htm(SNBinder.bind(templates("main", user));
});

4. JSONデータのHTTP経由の読み込み (Loading data via JSON over HTTP)

SNBinderは、HTTP経由で簡単にJSONデータを読み込む為の補助関数を提供します。:

SNBinder.get(url, params, isJson, callback, options);
SNBinder.post(url, params, isJson, callback);

url: url to get/post the data from/data
params: url parameters (JavaScript object)
isJson: true if the server returns a JSON data
callback: callback function that processes the data (if isJson is false) or json and data (if isJson is true)
options: optional parameters to control the cache (default is {bypass_cache:false, cache_result:true} )

例えば、"/user/info"のレスポンスがユーザデータ(例えば{"name":"Leonardo da vinci"})のJSONオブジェクトだったら、前セクションの例は下記のように記述することができます。

SNBinder.get_named_sections("/static/templates.htm", function(templates) {
    SNBinder.get("/user/info", nil, true, function(user) {
        $('.body').htm(SNBinder.bind(templates("main", user));
    });
});

5. キャッシュ制御

SNBinderでは、メモリ内にキャッシュされたデータやテンプレートをget()メソッドで取得することが可能です。また、それらの利用を制御することも可能です:

flush_all(): flush all the cached data
flush(url, params): flush associated with url + url parameters

6. 初期化(アドバンス)

アプリケーションがSNBinder.getやSNBinder.postをコール(isJson=trueであり、且つサーバーが"login_required"プロパティtrueでJSONオブジェクトを返す状態とする)するとき、SNBinderはSNBinder.init()のオプションパラメータで特定される"login"関数をコールします。

About

Client-side HTML Template Engine

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 100.0%