我正在使用redux-cycle编写一个非常简单的应用程序,包含3个元素:
我根据这个答案编写了一个非常简单的websocket驱动程序https://stackoverflow.com/a/42926532/842860
接线代码如下:
function TextBoxChange()
{
var textboxValue=$("input[name=bg]").val();
var pattern=/https?:\/\/.*\.(?:png|jpg|gif)/i;
//alert(/https?:\/\/.*\.(?:png|jpg|gif)/i.test(textboxValue));
if(pattern.test(textboxValue))
{
$("#errorMsg").text("valid");
}
else
{
$("#errorMsg").text("invalid");
}
}
问题是如何在单击连接按钮时使websocket重新连接到另一个端点?我是否需要修改我的websocket驱动程序以捕获事件并重新连接,或者cyclejs是否提供了动态更新源/接收器的方法?
答案 0 :(得分:2)
我认为合适的方法是确实更新WSDriver
以获取sink$
作为输入。此sink$
可能包含您要连接的网址。
你的司机看起来像这样
function WSDriver(endpoint$) {
var activeConnection;
return endpoint$
.map(endpointUrl => xs.create({
start: listener => {
activeConnection = new WebSocket('ws://localhost:4000');
/* no change here */
},
stop: () => {
activeConnection.close();
}
}))
.flatten() // it's a stream of stream, so we need to flatten it
}
在app
方面,您需要更改此
run(main, {
WEBSOCKET: WSDriver(), // < no initial connection
ACTION: makeActionDriver()
});
在main
function main(sources) {
return {
ACTION: sources.WEBSOCKET,
WEBSOCKET: newConnection$.startWith("ws://localhost:3000/something")
}
}
鉴于newConnection$
来自按钮上的点击事件。
希望有所帮助