游戏的mvvm架构
Loxodon.Framework.XLua 是一个XLua的开源的MVVM框架
LoxodonFramework是一个轻量级的MVVM(Model-View-ViewModel)框架,它是专门为Unity3D游戏开发设计的
require("framework.System")
local Context = CS.Loxodon.Framework.Contexts.Context
local SimpleCommand = CS.Loxodon.Framework.Commands.SimpleCommand
local AsyncTask = CS.Loxodon.Framework.Asynchronous["AsyncTask`1[System.Object]"]
local ObservableObject = require("framework.ObservableObject")
local ObservableDictionary = require("framework.ObservableDictionary")
local InteractionRequest = require("framework.InteractionRequest")
---
--模块
--@module LoginViewModel
local M=class("LoginViewModel",ObservableObject)
--执行父类ObservableObject的构造函数,这个重要,否则无法监听数据改变
--[[--
构造函数
@param #table self
@param #table t 初始化参数
]]
function M:ctor(t)
M.super.ctor(self,t)
self.username = self.globalPreferences:GetString("LAST_USERNAME", "");
self.password = ""
self.account = nil
self.errors = ObservableDictionary()
self.loginCommand = SimpleCommand(function() self:login() end,true)
self.cancelCommand = SimpleCommand(function() self.interactionFinished:Raise(nil) end,true)
self.interactionFinished = InteractionRequest(self)
self.toastRequest = InteractionRequest(self)
end
function M:validateUsername()
end
function M:validatePassword()
end
function M:login()
end
return M
require("framework.System")
local Loading = CS.Loxodon.Framework.Views.Loading
local Toast = CS.Loxodon.Framework.Views.Toast
---
--模块
--@module LoginView
local M=class("LoginView",target)
function M:onCreate(bundle)
local bindingSet = self:CreateBindingSet();
bindingSet:Bind():For("onInteractionFinished"):To("interactionFinished")
bindingSet:Bind():For("onToastShow"):To("toastRequest")
bindingSet:Bind(self.username):For ("text", "onEndEdit"):To ("username"):TwoWay ()
bindingSet:Bind(self.usernameErrorPrompt):For ("text"):To ("errors['username']"):OneWay ()
bindingSet:Bind(self.password):For ("text","onEndEdit"):To ("password"):TwoWay ()
bindingSet:Bind(self.passwordErrorPrompt):For ("text"):To ("errors['password']"):OneWay ()
bindingSet:Bind(self.confirmButton):For ("onClick"):To ("loginCommand")
bindingSet:Bind(self.cancelButton):For ("onClick"):To ("cancelCommand")
bindingSet:Build()
end
function M:onInteractionFinished(sender, args)
self:Dismiss()
end
function M:onToastShow(sender, args)
local notification = args.Context
if not notification then
return
end
Toast.Show(self, notification, 2);
end
return M