【发布时间】:2017-02-27 12:40:23
【问题描述】:
我关注Modular Design Pattern 已经有一段时间了,发现它非常有用,因为它有助于代码的良好维护和将块分离为模块。
经常使用 jQuery 的模块结构导致我的大部分应用程序/代码遵循以下结构:
(function() {
var chat = {
websocket: new WebSocket("ws://echo.websocket.org/"),
that: this,
init: function() {
this.scrollToBottom();
this.bindEvents();
this.webSocketHandlers();
},
bindEvents: function() {
this.toggleChat();
this.filterPeople();
this.compose();
},
elements: {
indicator: $(".indicator"),
statusText: $(".status-text"),
chatHeadNames: $(".people li .name"),
filterInput: $("#filter-input"),
msgInput: $("#msg-input"),
sendBtn: $(".send")
},
...
...
...
filterPeople: function() {
var that = this;
this.elements.chatHeadNames.each(function() {
$(this).attr('data-search-term', $(this).text().toLowerCase());
});
},
...
...
};
chat.init();
})();
我想知道的是,通过 jQuery 引用我的所有元素作为单个变量 chat.elements 的一部分是否是一种良好做法?
我的一部分告诉我,它确实是一次引用所有选择器并将它们缓存在变量中的好方法,以便可以使用缓存的变量(而不是多个 DOM 选择)完成对同一元素的多次使用。
我的另一部分告诉我这可能是一个反模式,需要时应该选择特定元素并在本地缓存。
我自始至终都使用了类似的结构,并且对代码的反应不一,但没有什么可靠的。任何帮助,将不胜感激。谢谢!
【问题讨论】:
-
使用元素来选择名称和状态或其他东西不是一个好主意,如果有人用检查元素更改名称会发生什么?或者明天你的队友换主题一切都会被打破!
-
将数据保存在数组或对象中并用于存储使用本地存储
-
元素属性在页面加载时被解析,事件直接绑定到节点,所以如果有人用检查元素更改名称,它不会引起问题。而
localstorage是个坏主意。
标签: javascript jquery design-patterns modular-design