English -> README.md
(最新じゃないかも。)
最小構成のJavaScript Model-Viewライブラリー。
こんな機能があります。
- イベント監視
- key-valueストレージを備えたModel
- 要素とモデルに紐づいたView
<script>
タグで読み込む- osteoporosis.min.jsからコピペしてJSファイルに貼り付ける(サンプルのJSファイルを見てね)
<div id="the-tab">
<nav>
<a class="is-active" href="#item1">Item 1</a>
<a href="#item2">Item 2</a>
<a href="#item3">Item 3</a>
</nav>
<article id="item1" class="is-active">
<h1>Item 1</h1>
<p class="item-image">🍎</p>
</article>
<article id="item2">
<h1>Item 2</h1>
<p class="item-image">🍣</p>
</article>
<article id="item3">
<h1>Item 3</h1>
<p class="item-image">🍌</p>
</article>
</div>
<script src="jquery.js"></script>
<script src="osteoporosis.js"></script>
<script>
(function(O) {
// --------------------------------
// TODO: ここにコードを書く
// --------------------------------
})(window.Osteoporosis);
</script>
// タブモデル
var Tab = O.Model.extend({
});
// タブビュー
var TabView = O.View.extend({
initialize: function(options) {
// ユーザー操作からモデルの値を更新
// (要素→モデル)
this.$('nav a').on('click', this.onclickButton.bind(this));
// モデルの値からUIを更新
// (モデル→ビュー)
this.model.on('change:target', this.onchangeTarget.bind(this));
},
/**
* 要素がクリックされた際に呼ばれる。
* @param {Event} event
*/
onclickButton: function(event) {
event.preventDefault(); // URLハッシュ変更させない
var $link = $(event.currentTarget);
var target = $link.attr('href').slice(1); // "href=#foo" -> "foo"
this.model.set('target', target);
},
/**
* タブモデルのtarget値が変更された際に呼ばれる。
* @param {Tab} tab
*/
onchangeTarget: function(tab) {
// 対象の名前を取得
var target = this.model.get('target');
// 現時点の活性スタイルを除去
this.$('nav a, article').removeClass('is-active');
// 活性スタイルを設定
var $button = this.$('nav a[href=#' + target + ']');
var $article = this.$('article#' + target);
$button.addClass('is-active');
$article.addClass('is-active');
}
});
// 開始点
$(function() {
// モデル
var tab = new Tab();
// ビュー
var tabView = new TabView({
$el: $('#the-tab'),
model: tab
});
// 初期のタブを選択
tab.set('target', 'item1');
});
type
: {String} イベント名listener
: {Functions} コールバック
model.on('change', function(){});
model.set('foo', 123);
type
: {String} イベント名- arguments... : コールバックへ与えられる
model.on('poke', function(target, time) { console.log(target, time); });
model.trigger('poke', { name:'obj' }, new Date());
off()
listenTo()
once()
- コンテキスト付きの
on()
…on(type, listener, context)
こんな機能です。
- key-valueストレージ
- 値変更時の
change
イベント
インスタンス作成の例:
var O = Osteoporosis;
var MyModel = O.Model.extend({ /* properties */ });
var model = new MyModel({ key1:'value1', key2:'value2' });
attributes
: {Object} 保存される値。
指定の値を格納した状態でインスタンス生成されます。
var O = Osteoporosis;
var MyModel = O.Model.extend({
initialize: function(attributes) {
console.log(model.get('v1'));
console.log(model.get('v2'));
}
});
var model = new MyModel({ v1:123, v2:'foo' });
- 戻り値: 保存された値。
key
: {String} 値の名前。
値を返します。
- 戻り値: インスタンス。
attributes
: {Object} 保存されるkey-valueの組み合わせ。
model.set({ v1:123, v2:'foo' });
console.assert(model.get('v1') === 123);
console.assert(model.get('v2') === 'foo');
set(key, value)
は利用できません。
- 型: Object
値を保存するオブジェクト。
change
イベントを発火せずに値を設定する事ができます。
model.set({ v1:123, v2:'foo' });
console.assert(model.attributes['v1'] === 123);
console.assert(model.attributes['v2'] === 'foo');
on(type, listener)
trigger(type [, arguments...])
id
has()
save()
こんな機能です。
- 要素と連携
- モデルと連携
インスタンス作成の例:
var O = Osteoporosis;
var MyView = O.View.extend({ /* properties */ });
var view = new MyView({ el:$('#target'), model:model });
options.el
: {HtmlElement} Default isdocument
.options.model
: {Osteoporosis.Model}
options
のel
, model
は自動的にプロパティに保存されます。
var O = Osteoporosis;
var MyView = O.Model.extend({
initialize: function(options) {
console.log(this.$el);
console.log(this.model);
}
});
var view = new MyView({ el:$('#target'), model:model });
options.el
がview.$el
となるのであって、options.$el
やview.el
ではない事に気を付けてください。
selector
: {String} セレクター。
要素を返します。
<div id="outer">
<div id="inner">
<p id="p1"></p>
</div>
<p id="p2"></p>
</div>
var view = new MyView({ el:$('#inner') });
var p = view.$('p');
console.assert(p.length === 1);
console.assert(p[0].id === 'p1');
- 型: HtmlElement
コンストラクターのoptions
で指定されたもの。
- 型: jQuery Object
コンストラクターのoptions.el
で指定されたものを格納したjQueryオブジェクト。
on(type, listener)
trigger(type [, arguments...])
events
ui
render()
setElement()
- MIT License: http://opensource.org/licenses/MIT
- 2014-10-19
- 最初のリリース。