home wiki.fukuchiharuki.me
Menu

../

キーワード

  • Titanium Mobile
  • Alloy

目標

モデルの事始めです。要するに SQLite を使う、です。

  1. モデルを用意する
  2. モデルを保存する (save)
  3. モデルを取得する (fetch)
  4. モデルを削除する (destroy)

方法

モデルを用意する

ウィザード「(プロジェクトで)右クリック > New > Alloy Model」からモデルを新規作成します。

new_model.png

永続化するモデルの名前と属性を設定します。つまりテーブル名とカラムです。ここで SQLite にない Type を選択すると実行時にコンソールで警告がでますが、いい感じに吸収してくれるようです。

config_model.png

すると次のコードを自動生成します。(基本このままでOK)

  • /app/models/User.js
    exports.definition = {
    	config: {
    		columns: {
    		    "name": "text",
    		    "isActive": "integer"
    		},
    		adapter: {
    			type: "sql",
    			collection_name: "User"
    		}
    	},
    	extendModel: function(Model) {
    		_.extend(Model.prototype, {
    			// extended functions and properties go here
    		});
    
    		return Model;
    	},
    	extendCollection: function(Collection) {
    		_.extend(Collection.prototype, {
    			// extended functions and properties go here
    		});
    
    		return Collection;
    	}
    };

モデルを保存する

モデルはコントローラから操作します。

  1. モデルを生成して (Alloy.createModel(モデル名))
  2. 属性を与えて (Model.set(属性オブジェクト))
  3. 保存します (Model.save())
  • Window.js
    $.save.addEventListener('touchstart', function() {
    	var user = Alloy.createModel("User");
    	user.set({
    		name: "NAME",
    		isActive: 1
    	});
    	user.save();
    	alert('saved');
    });

モデルを取得する

  1. コレクション(モデル集合)を生成して (Alloy.createCollection(モデル名))
  2. DBMS からフェッチ (Collection.fetch(クエリオブジェクト))
  3. コレクションを操作します (Collection.map(function() {}))
  • Window.js
    $.find.addEventListener('touchstart', function() {
    	var users = Alloy.createCollection('User');
    	users.fetch({
    		query: 'SELECT * FROM User WHERE isActive = 1'
    	});
    	alert(users.length);
    	users.map(function(user) {
    		alert(
    			'id:' + user.id + ', ' +
    			'name:' + user.get('name') + ', ' +
    			'isActive:' + user.get('isActive')
    		);
    	});
    });

モデルを削除する

  1. モデルを生成して (Alloy.createModel(モデル名))
  2. DBMS からフェッチ (Model.fetch({id:識別子}))
  3. モデルを削除します (Model.destroy())
  • Window.js
    $.del.addEventListener('touchstart', function() {
    	var user = Alloy.createModel('User');
    	user.fetch({id: "'f9fb6556-e763-6740-1621-b956bbdafe60'"});
    	user.destroy();
    	alert('deleted');
    });

解説

レコードをユニークに識別する id は alloy_id として Alloy が自動で付与してくれるようです。文字列な識別子なので Model.fetch({id:識別子}) で指定する識別子はシングルコーテーションをダブルコーテーションで囲う形で書いてみました。

参考