From 82a1c8f6977c3979204c571a4803461d45230dbc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E8=B4=A4=E5=BF=83?=
<3277200+sentsim@users.noreply.github.com>
Date: Mon, 14 Apr 2025 00:08:02 +0800
Subject: [PATCH] =?UTF-8?q?refactor(component):=20=E5=89=94=E9=99=A4=20isR?=
=?UTF-8?q?enderOnEvent,=20isRenderWithoutElem=20=E9=80=89=E9=A1=B9=20(#26?=
=?UTF-8?q?25)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
docs/component/detail/options.md | 28 ----------------------------
src/modules/component.js | 19 ++++---------------
src/modules/tabs.js | 2 --
3 files changed, 4 insertions(+), 45 deletions(-)
diff --git a/docs/component/detail/options.md b/docs/component/detail/options.md
index 592584e8..19ad6e8f 100644
--- a/docs/component/detail/options.md
+++ b/docs/component/detail/options.md
@@ -53,34 +53,6 @@ CONST: {
- |
-isRenderWithoutElem 实验性 |
-
-
-渲染是否无需指定目标元素。即无需设置 `elem` 选项,一般用于渲染即显示的组件类型。
-
- |
-boolean |
-
-
-`false`
-
- |
-
-
-isRenderOnEvent 实验性 |
-
-
-渲染是否由事件触发。如 `dropdown` 这类通过点击触发的组件,那么应该设置为 `true`;而诸如 `tabs` 这类初始即展示的组件,则应该设置为 `false`。*推荐根据组件类型始终显式设置对应值*。
-
- |
-boolean |
-
-
-`true`
-
- |
-
-
isDeepReload 实验性 |
diff --git a/src/modules/component.js b/src/modules/component.js
index e893a5bf..6a5b46f1 100644
--- a/src/modules/component.js
+++ b/src/modules/component.js
@@ -13,8 +13,6 @@ layui.define(['jquery', 'lay'], function(exports) {
exports('component', function(settings) {
// 默认设置
settings = $.extend(true, {
- isRenderWithoutElem: false, // 渲染是否无需指定目标元素
- isRenderOnEvent: true, // 渲染是否仅由事件触发。--- 推荐根据组件类型始终显式设置对应值
isDeepReload: false // 是否默认为深度重载
}, settings);
@@ -107,7 +105,7 @@ layui.define(['jquery', 'lay'], function(exports) {
};
// 初始化准备(若由事件触发渲染,则必经此步)
- Class.prototype.init = function(rerender, type){
+ Class.prototype.init = function(rerender, type) {
var that = this;
var options = that.config;
var elem = $(options.elem);
@@ -153,21 +151,11 @@ layui.define(['jquery', 'lay'], function(exports) {
settings.beforeRender.call(that, options);
}
- // 执行渲染
- var render = function() {
+ // 渲染
+ if (typeof settings.render === 'function') {
component.cache.id[options.id] = null; // 记录所有实例 id,用于批量操作(如 resize)
elem.attr(MOD_ID, options.id); // 目标元素已渲染过的标记
that.render(rerender); // 渲染核心
- };
-
- // 若绑定元素不存在
- if (!elem[0]) {
- return settings.isRenderWithoutElem ? render() : null; // 渲染是否无需指定目标元素
- };
-
- // 执行渲染 - 是否初始即渲染组件
- if((settings.isRenderOnEvent && options.show) || !settings.isRenderOnEvent) {
- render();
}
// 事件
@@ -232,6 +220,7 @@ layui.define(['jquery', 'lay'], function(exports) {
// 移除指定的实例对象
component.removeInst = function(id) {
delete instance.that[id];
+ delete component.cache.id[id];
};
// 组件缓存
diff --git a/src/modules/tabs.js b/src/modules/tabs.js
index 59c90f8d..11cce8dc 100644
--- a/src/modules/tabs.js
+++ b/src/modules/tabs.js
@@ -28,8 +28,6 @@ layui.define('component', function(exports) {
CARD: 'layui-tabs-card'
},
- isRenderOnEvent: false,
-
// 渲染
render: function() {
var that = this;
|