>
我要显示的示例是一个图形可视化工具,其中数据是精美的交叉用户。 Websocket的使用将使可以在用户的浏览器和服务器之间打开交互式通信会话。
的目标是使示例尽可能简单。这里学到的概念将有助于您减少耦合。此外,这是构建可扩展,灵活和可维护的代码的一种非常有用的方法。在我们的实验结束时,我们将取得以下结果:
>模型>,> views ,>控制器> Controllers>, collections>, 自定义事件。它的结构有助于我们将用户界面与业务逻辑分开。在本文中,我将仅在其中一些元素上向您介绍,但如果您想要更深入的指南,我建议您阅读文章“ Backbone.js Basics:模型,视图,收藏和模板”。 🎜>
模型代表数据,可以通过扩展brockbone.model:a视图是将用户界面组织到逻辑视图中的一种方式,并由模型支持。它不包含HTML标记,而只是将模型数据显示给用户的逻辑。要创建一个视图,您需要扩展骨链。查看如下:
<span>var MyModel = Backbone.<span>Model</span>.extend({ </span> <span>initialize: function () { </span> <span>console.log('model initialized'); </span> <span>} </span><span>})</span>
>事件是一个可以混合到任何对象的模块,使对象具有绑定和触发自定义命名事件的能力。
<span>var MyView = Backbone.<span>View</span>.extend({ </span> <span>el: 'div#my-view-container', </span> <span>initialize: function (options) { </span> <span>this.model = new MyModel() </span> <span>console.log('view initialized') </span> <span>} </span><span>})</span>
和 view都有此模块事件,它使我们能够将事件绑定到> model>或> view 。一个常见的模式是创建对模型变化的视图。该技术通常旨在允许视图在基础数据更改时自动重新呈现自己。。 为您提供了这些元素如何一起工作的示例,我已经在Codepen上创建了一个演示。
>请参阅codepen上的sitepoint(@sitepoint)的笔xxpwmq。
>每当我们更改input
时,更改我们的型号。击中确定按钮后,视图将呈现新的ID值。>
>服务器和客户端之间的实时通信
Websockets是一种高级方法,可以在用户的浏览器和服务器之间打开交互式通信会话。使用此API,用户可以将消息发送到服务器并接收以事件为导向的响应,而无需对服务器进行轮询以进行回复。该合同是描述规则和预期行为的协议,并需要双方的行动。当这两个部分通过API链接时,它是集成服务器和客户端的胶水。 > socket.io是用于实时Web应用程序的JavaScript库。它可以在Web客户端和服务器之间进行双向通信。双方具有相同的API,并且像Node.js一样驱动事件驱动。要在浏览器和服务器之间打开此交互式通信会话,我们必须创建HTTP服务器以实现实时通信。它将允许我们发出和接收消息。套接字是处理Web客户端和服务器之间此通信的对象。 下面的代码使用socket.io与Express Framework创建该服务器。
使用此代码,我们能够构建以下演示:
>
创建RESTFUL API
PubSub是一种异步消息范式。它提供了一项功能,可以避免耦合。耦合是当一组代码高度依赖彼此时,这意味着,如果一块代码更改,则需要对使用此代码的所有内容进行更新。
),任何人都可以收听(<span>var MyModel = Backbone.<span>Model</span>.extend({
</span> <span>initialize: function () {
</span> <span>console.log('model initialized');
</span> <span>}
</span><span>})</span>
<span>var MyView = Backbone.<span>View</span>.extend({
</span> <span>el: 'div#my-view-container',
</span> <span>initialize: function (options) {
</span> <span>this.model = new MyModel()
</span> <span>console.log('view initialized')
</span> <span>}
</span><span>})</span>
<span>var express = require('express'),
</span> app <span>= express(),
</span> http <span>= require('http').<span>Server</span>(app),
</span> io <span>= require('socket.io')(http);
</span>
http<span>.listen(process.env.PORT || 5000, function(){
</span> <span>console.log('listening on *:5000');
</span><span>});</span>
io<span>.on('connection', function(socket) {
</span> <span>console.log('a user connected');
</span> socket<span>.on('disconnect', function(){
</span> <span>console.log('user disconnected');
</span> <span>});
</span><span>});</span>
请参阅codepen上的sitepoint(@sitepoint)的pen qydxwo。
>带有骨干的pubsub.js<span>var socket = io("http://pubsub-example-with-backbone.herokuapp.com/");</span>
<span>var MyModel = Backbone.<span>Model</span>.extend({ </span> <span>initialize: function () { </span> <span>console.log('model initialized'); </span> <span>} </span><span>})</span>
这样做,然后您现在可以从我们的骨干视图中删除socket.io。
<span>var MyView = Backbone.<span>View</span>.extend({ </span> <span>el: 'div#my-view-container', </span> <span>initialize: function (options) { </span> <span>this.model = new MyModel() </span> <span>console.log('view initialized') </span> <span>} </span><span>})</span>
目标是避免模块之间的依赖关系。每个模块都可以拥有一个频道,例如广播电台发射事件(发布者),其他任何模块都可以收听希望接收通知(订阅者)的事件。
><span>var express = require('express'), </span> app <span>= express(), </span> http <span>= require('http').<span>Server</span>(app), </span> io <span>= require('socket.io')(http); </span> http<span>.listen(process.env.PORT || 5000, function(){ </span> <span>console.log('listening on *:5000'); </span><span>});</span>
请参阅codepen上的sitepoint(@sitepoint)的笔GPGNPZ。
图可视化示例
>我们的图形可视化使用客户端上的两个模块:一个用于绘制有向图的图形,另一个用于存储和获取数据。图形图模块使用名为“力编辑器”的工具。我们称该模块在代码中称为ForceView,使我们可以以简单而直观的方式将图的节点放置在二维空间中。我们称为DBAA的存储模块使用socket.io启用Web客户端和服务器之间的实时,双向通信。他们都不知道,
forceview,都知道其他任何一个。他们的行为都是孤立的。 >两个模块均以A> publish/subscribe样式设置,以避免依赖关系。他们以与广播作品相同的方式使用事件系统,并带有广播电台广播(发布)和无线电接收器(订阅)。每个模块没有直接与另一个模块进行交谈,而是在共享的“
无线电站”上发布他们的消息,在自己的频道上启动事件,而另一个也可以聆听任何其他渠道。
>这里唯一的依赖性是在每个无线电通道上的API很小。重要的是,该通道正在触发哪个消息,并确保系统正确对事件做出反应。如果他们触发事件并给出正确的事物,则系统将整体工作。查看下面的图像,以查看从这些模块中的每个模块中发出哪些事件。>
请注意,我们不使用任何数据库。数据存储在内存中。我们分解代码的方式允许我们连接到任何类型的数据库。 运行我们的图形可视化示例本地 然后执行从控制台安装的NPM安装以安装所有依赖项。
>
>下一步是将其自定义并将数据存储在数据库中,而不是在内存中。但是,我们可能会在即将发布的一篇文章中讨论自定义。 >常见问题(常见问题解答)有关使用backbone.js and socket.io backbone.js在构建Web应用程序中的作用是什么?具有丰富的枚举功能的API,具有声明性事件处理的视图,并将其全部连接到您现有的API,并通过静止的JSON接口将其连接到现有的API。它有助于组织您的代码并更容易管理。在处理复杂的用户界面和大量数据时,它特别有用。整个代码可在GitHub上找到。您可以克隆存储库或下载代码。
>
<span>var MyModel = Backbone.<span>Model</span>.extend({
</span> <span>initialize: function () {
</span> <span>console.log('model initialized');
</span> <span>}
</span><span>})</span>
>随时在下面的部分中分享您的评论。
> socket.io如何增强Web应用程序的功能?
socket.io是一个JavaScript库,可以实现实时,双向和基于事件的浏览器和服务器之间的通信。它由两个部分组成:一个在浏览器中运行的客户端库和Node.js的服务器端库。两个组件都有相同的API。 socket.io在创建实时应用程序(例如聊天应用程序,实时分析,二进制流,即时消息传递和文档协作)中非常有用。>
>如何处理Backbone.js中的事件?
socket.io支持二进制数据,例如斑点和数组缓冲区。您可以将二进制数据从客户端发送到服务器或从服务器发送到客户端。 socket.io自动照顾编码和解码二进制数据。
如何处理socket.io?
backbone.js允许您扩展其模型和视图以创建自己的自定义模型和视图。您可以使用“扩展”方法来创建模型或视图的子类。然后,您可以将自己的方法和属性添加到子类中。
>以上是使用backbone.js和socket.io构建网络应用程序的详细内容。更多信息请关注PHP中文网其他相关文章!