ModeloEspecial:基于 Backbone.JS 的 ORM

439
投票支持!

ModeloEspecial 是一个深受 Backbone.Model 启发的 ORM。它采用面向对象的方法进行数据库交互。

我们正在生产环境中使用它,除了使其更加模块化和易于理解之外,它已经为我们节省了数百行代码。

此文件预览了我们在内部如何使用它来映射数据库中的记录并准备好使用的精灵。

local modeloEspecial = ModeloEspecial:new {
	name = "yogodb",
	debug = settings.debugSql
}

local function migrate(schemaVersion, exec)
	if schemaVersion < 1 then
		log "migrating schema to v1"

		local createPlayers = [[CREATE TABLE IF NOT EXISTS players (
gender VARCHAR,
country VARCHAR,
sombrero INTEGER,
level INTEGER,
currentExp INTEGER,
firstRun INTEGER,
name VARCHAR,
color1 INTEGER,
color2 INTEGER,
totalTimePlayed INTEGER,
remoteplayerid VARCHAR,
wordId VARCHAR);]]
		exec(createPlayers)
	end
	return 1
end

modeloEspecial:migrate(migrate)
local Model = require'modeloespecial'.Model
local Player = Model:extend {table = 'players'}

Player.sequenceData = {
	{name = "idle", start = 1, count = 8, time = 800},
	{name = "jump", start = 9, count = 8, time = 800},
	-- other sequence data
}
Player.sheetData = {
  width = 128,
  height = 128,
  numFrames = 16,
}

function Player:getSprite(parent)
	assert(self:isInstanceOf(Player), 'Called .getSprite() instead of :getSprite()')

	local group = display.newGroup()

  -- the spritesheet is in either images/player/male.png or images/player/female.png

  local path = string.format("images/player/%s.png", self:get'gender')
	local sheet = graphics.newImageSheet(path, self.class.sheetData)
	local sprite = display.newSprite(group, sheet, self.class.sequenceData)
	group.sprite = sprite
	function group:playSequence(name)
	  self.sprite:setSequence(name)
	  self.sprite:play()
	end

	if parent then
		parent:insert(group)
	end
	return group
end

return Player
local storyboard = require 'storyboard'
local Player = require 'player'
local scene = storyboard.newScene()

local player

function scene:createScene()

end

function scene:enterScene()
  player = Player:fetchById(1)
  player:getSprite(scene.view)
end

function scene:exitScene()
  player = nil
end

scene:addEventListener('createScene', scene)
scene:addEventListener('enterScene', scene)
scene:addEventListener('exitScene', scene)

return scene

分类: 
标签: 
贡献者: 
jeduan