Files
fc/dev/project/library/imports/c0/c0c14f88-1f4e-4ae3-9c45-68e44ae6f374.js
T

205 lines
5.1 KiB
JavaScript
Raw Normal View History

2026-05-24 10:21:26 +08:00
"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();