205 lines
5.1 KiB
JavaScript
205 lines
5.1 KiB
JavaScript
"use strict";
|
|
cc._RF.push(module, 'c0c14+IH05K45xFaORK5vN0', 'nx.view');
|
|
// Scripts/nx/view/nx.view.js
|
|
|
|
"use strict";
|
|
|
|
/*******************************************************************************
|
|
*
|
|
* Nx单视图类
|
|
*
|
|
*
|
|
*
|
|
* 2021.12.10
|
|
******************************************************************************/
|
|
|
|
var NxObject = require("nx.object");
|
|
var NxView = cc.Class({
|
|
"extends": NxObject,
|
|
name: "NxView",
|
|
// 初始化
|
|
initialize: function initialize(_args) {
|
|
if (!this._super(_args)) {
|
|
return false;
|
|
}
|
|
this.vid = "";
|
|
this.model = null;
|
|
this.flag = "";
|
|
this.props = {};
|
|
return true;
|
|
},
|
|
// 销毁
|
|
uninitialize: function uninitialize() {
|
|
this.vclear();
|
|
|
|
// USPER
|
|
return this._super();
|
|
},
|
|
// 标签设置
|
|
vflag: function vflag(flag) {
|
|
this.flag = flag;
|
|
},
|
|
// 重置
|
|
reset: function reset(_model) {
|
|
_model = _model ? _model : this.model;
|
|
if (!nx.dt.arrGood(_model)) {
|
|
nx.error("[单视图]重置失败,错误的模板!");
|
|
return false;
|
|
}
|
|
this.model = nx.dt.objClone(_model);
|
|
for (var i = 0; i < this.model.length; ++i) {
|
|
var p = this.model[i];
|
|
if (!nx.dt.objGood(p) || nx.dt.strEmpty(p.key)) {
|
|
nx.error("[单视图]重置出错,模板中有错误的设定! 第%d个属性", i);
|
|
continue;
|
|
}
|
|
this.vset(p.key, p.value, true, p.desc);
|
|
}
|
|
return true;
|
|
},
|
|
// 设置
|
|
vset: function vset(key, value, notify, desc) {
|
|
if (nx.dt.strEmpty(key)) {
|
|
nx.error("[单视图]属性查询失败,无效的属性名!");
|
|
return false;
|
|
}
|
|
|
|
// nx.debug( "props:[" + this.flag + "] " + key + " -> " + value )
|
|
|
|
// 更新
|
|
var p = this.props[key];
|
|
if (p != null) {
|
|
p.old = nx.dt.objClone(p.now);
|
|
p.now = nx.dt.objClone(value);
|
|
} else {
|
|
this.props[key] = {
|
|
now: nx.dt.objClone(value),
|
|
old: nx.dt.objClone(value),
|
|
binders: [],
|
|
desc: desc
|
|
};
|
|
}
|
|
|
|
// 通告
|
|
if (notify != false) {
|
|
this._notify(this.props[key]);
|
|
}
|
|
return true;
|
|
},
|
|
// 广播一次
|
|
vnotify: function vnotify(key) {
|
|
var p = this.props[key];
|
|
if (p != null) {
|
|
this._notify(p);
|
|
} else {
|
|
nx.error("[单视图]未定义的属性: " + key);
|
|
}
|
|
},
|
|
// 获取
|
|
vget: function vget(key, def) {
|
|
var p = this._query(key);
|
|
return p ? nx.dt.objClone(p.now) : def;
|
|
},
|
|
// 获取老值
|
|
vgetOld: function vgetOld(key, def) {
|
|
var p = this._query(key);
|
|
return p ? nx.dt.objClone(p.old) : def;
|
|
},
|
|
// 监听
|
|
vbind: function vbind(key, callback, tag) {
|
|
if (typeof tag != "string" || tag == "") {
|
|
nx.error("[单视图]监听失败,标记必须是有效字符串");
|
|
return false;
|
|
}
|
|
var p = this._query(key);
|
|
if (p == null || typeof callback != "function") {
|
|
nx.error("[单视图]属性监听失败,参数不匹配!");
|
|
return false;
|
|
}
|
|
for (var i = 0; i < p.binders.length; i++) {
|
|
var cb = p.binders[i];
|
|
if (cb == callback) {
|
|
nx.error("[单视图]重复监听:" + key);
|
|
return false;
|
|
}
|
|
}
|
|
p.binders.push({
|
|
cb: callback,
|
|
tag: tag
|
|
});
|
|
nx.dt.trycatch(function () {
|
|
callback(p.now, p.old, true);
|
|
});
|
|
return true;
|
|
},
|
|
// 批量监听
|
|
vbinds: function vbinds(tag, _lst) {
|
|
if (typeof tag != "string" || tag == "") {
|
|
nx.error("[单视图]批量监听失败,标记必须是有效字符串");
|
|
return false;
|
|
}
|
|
if (_lst.length == 0) {
|
|
nx.error("[单视图]批量监听失败,监听列表空!" + tag);
|
|
return false;
|
|
}
|
|
for (var i in _lst) {
|
|
var binder = _lst[i];
|
|
this.vbind(binder[0], binder[1], tag);
|
|
}
|
|
|
|
// nx.debug( "为[%s]增加监听[%d]个.", tag, _lst.length );
|
|
return true;
|
|
},
|
|
// 监听解除
|
|
vunbind: function vunbind(tag) {
|
|
if (typeof tag != "string" || tag == "") {
|
|
nx.error("[单视图]监听解除失败,标记必须是有效字符串");
|
|
return false;
|
|
}
|
|
var count = 0;
|
|
for (var k in this.props) {
|
|
var p = this.props[k];
|
|
for (var i = p.binders.length - 1; i >= 0; i--) {
|
|
var binder = p.binders[i];
|
|
if (binder && binder.tag == tag) {
|
|
p.binders.splice(i, 1);
|
|
count++;
|
|
}
|
|
}
|
|
}
|
|
|
|
// nx.debug( "为[%s]解除监听[%d]个.", tag, count );
|
|
return true;
|
|
},
|
|
// 清理
|
|
vclear: function vclear() {
|
|
this.props = {};
|
|
},
|
|
// 查询
|
|
_query: function _query(_key) {
|
|
if (typeof _key != "string" || _key == "") {
|
|
nx.error("[单视图]属性查询失败,无效的属性名!");
|
|
return null;
|
|
}
|
|
var p = this.props[_key];
|
|
if (typeof p == "undefined") {
|
|
nx.error("[单视图]属性查询失败,不存在属性:" + _key);
|
|
return null;
|
|
}
|
|
return p;
|
|
},
|
|
// 通告
|
|
_notify: function _notify(_prop) {
|
|
nx.dt.trycatch(function () {
|
|
for (var i in _prop.binders) {
|
|
var binder = _prop.binders[i];
|
|
if (binder && typeof binder.cb == "function") {
|
|
binder.cb(_prop.now, _prop.old, false);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
});
|
|
module.exports = NxView;
|
|
|
|
cc._RF.pop(); |