【发布时间】:2012-09-17 15:46:11
【问题描述】:
我想将 DOM 操作和交互 (jQuery) 分开,让我们从我的客户端应用程序逻辑 (socket.io) 中将其称为 VIEW,让我们将其称为控制器。沟通需要有两种方式:
- 当用户与 DOM 交互时查看到 CONTROLLER,例如点击按钮
- 当服务器发送要在 DOM 中显示的更新时查看控制器,例如新的聊天消息
我在这两个 JavaScript 对象之间进行通信时遇到了问题。我如何以有效的方式在两者之间进行沟通?下面的简单示例。
// CONTROLLER LOGIC (socket.io stuff)
function socketController() {}
socketController.prototype = {
constructor: function() {
// define socket listners
this.socket.on('chatMessage', this.chatUpdate.bind(this));
}
chatUpdate: function(data) {
// somehow call a "render" function on the "view" object
// this.view.renderChatDOM(data.username, data.message);
}
}
// VIEW LOGIC (jQuery stuff)
function jqueryView() {}
jqueryView.prototype = {
onDOMReady: function() {
// bind event handlers
$('#send-message').bind('click', this.sendMessage.bind(this));
}
sendMessage: function(event) {
// manipulate DOM
var $messageNode = $('#message-input'),
$buttonNode = $('#send-message'),
message = $messageNode.val();
$messageNode.val(''); // clear input
// somehow call the socketController and send data
// this.socketController.chatSend(message);
}
}
【问题讨论】:
-
这是一个非常模糊的问题,不清楚您的示例中的哪个 javascript 是客户端还是服务器端...您能澄清一下吗?
-
没有服务器端代码。我只关心客户端分离:socket.io 代码从我的 Dom 操作 jQuery。
-
所以基本上socket.io和“socketController”中的应用程序逻辑需要将从服务器发送的更新传送到更新DOM的“jqueryView”对象。然后当另一个用例发生时:用户与 DOM 交互时,“jqueryView”对象需要将更改传达给“socketContoller”对象,以便它可以将数据发送到服务器。因此将 Dom 操作与应用程序逻辑分开......我希望这更清楚
-
我只是在纠结如何表示这两种方式的交流。
标签: javascript jquery model-view-controller node.js socket.io