0

我想将 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);
    }
}
4

2 回答 2

1

为什么不看看提供从视图到控制器(或视图模型)的两种方式数据绑定的 DOM 操作库。然后您不必管理手动更新,而只需更改您的客户端模型(或客户端视图),框架将负责保持层同步。http://knockoutjs.com可能是一个值得一看的好地方。

于 2012-09-26T08:36:04.657 回答
0

所以最后哈西斯是对的。我确实在寻找 javascript 中的 MVC 框架。我决定使用backbone.js,因为就大小、学习曲线和资源而言,它的侵入性最小。

这解决了我将应用程序逻辑 (MODEL) 从 DOM 操作和表示 (VIEW) 中分离出来的问题。

去骨干网.js!

于 2012-10-05T05:03:11.057 回答