gpt4 book ai didi

backbone.js - 在没有 Socket.io 的 Backbone.js 应用程序中使用 websockets

转载 作者:行者123 更新时间:2023-12-04 19:11:36 26 4
gpt4 key购买 nike

我是 Backbone 的新手,我正在尝试构建一个可以实时绘制和映射数据的 Backbone 应用程序。我在 this 之后实现了一个 websocket示例代码。问题是,我想使用比示例代码更广泛的数据集,如果我理解代码,它只是创建一个模型——一个点数组。我想要一个模型集合,其中每个模型都有纬度、经度和数量(只是一个数值)。

我如何实现一个 websocket,这样当我的后端发送一些 JSON 时,我的应用程序会创建一个具有这些属性的新模型?我在博客上读到我需要覆盖 Backbone.sync 并实现一个事件聚合器,但我见过的唯一例子是使用 socket.io。由于我在后端使用的语言/框架,Socket.io 不是一个选项。此外,最终我会将后端切换到 socket.io 也不支持的另一种语言,所以我想找到一种更通用的方法来在前端实现 websocket,而不涉及像这样的库套接字.io。

最佳答案

我找到了我自己的问题的解决方案。同样,我是 Backbone 的新手,所以我不确定这是否是最好的方法 - 对有关此解决方案是否遵循最佳实践的反馈感兴趣。代码基于 this example通过安德鲁乔拉基安。我保留了一些打印语句,这些语句在您运行代码时会很有帮助。

该代码假定您的后端以以下形式发送 JSON 数据{data: "{"lat": latitude, "long": longitude, "amt": amount}"}

// this function opens the websocket and will trigger add_point when
// a new message is received
Stream = function () {
_.extend(this, Backbone.Events);
var self = this;

self.socket = new WebSocket("ws://" + document.domain + ":5000/websocket");
console.log("Using a standard websocket");

self.socket.onopen = function(e) {
self.trigger('open', e);
console.log('socket opened');
};

self.socket.onerror = function(e) {
self.trigger('error', e);
};

self.socket.onmessage = function(e) {
self.trigger('message', e);
self.trigger('data', e.data);
self.trigger('add_point', JSON.parse(e.data));
};

self.socket.onclose = function(e) {
self.trigger('close', e);
console.log('socket closed');
};
};

DataPoint = Backbone.Model.extend({
defaults: {
lat: null,
long: null,
amt: null
}
});

DataSet = Backbone.Collection.extend({
model: DataPoint,
initialize: function(options) {
this.stream = options.stream;
var self = this;
this.stream.on("add_point", function(pt) {
self.add( new DataPoint({
lat: pt.lat,
long: pt.long,
amt: pt.amt
}));
console.log('updated collection');
console.log(self.models);
});
}
});

MapView = Backbone.View.extend({
initialize: function(options) {
this.dataSet = options.dataSet;
}
});

$(function() {
var stream = new Stream();
var dataSet = new DataSet({ stream: stream });
var mapView = new MapView({ dataSet: dataSet });
});

关于backbone.js - 在没有 Socket.io 的 Backbone.js 应用程序中使用 websockets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14610868/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com