我正在将 Dojo 1.9 用于我正在使用 WebSockets 编写的 Web 应用程序。当客户端收到来自服务器的消息时,我需要使用收到的数据更新某些小部件。
// sock is the client-side of the websocket
sock.onmessage = function (dataIn) {
// clientManager defined elsewhere
clientManager.fireMessageReceived(dataIn);
};
这是我的问题:在我收到数据时,我没有 ID、DOM 节点或小部件来访问要更新的属性/值。clientManager
专门处理 sock 事件,并且没有任何关于其数据将更新的小部件的具体知识。此外,可能有同一个小部件的多个实例,所以我认为尝试维护现有小部件(或 ID)的集合作为客户端管理器的属性可能会很快变得棘手。
所以,我的解决方案是使用 CSS 类。
我创建了一个空类并将其分配给我的小部件:
.myXYZWidget {
}
这样在我的fireMessageReceived
函数中,我可以使用dojo/query
它来找到它:
var myXYZWidgets = dojo.query(".myXYZWidget");
var i;
for (i = 0; i < myXYZWidgets.length; i++) {
var xyzWidget = registry.byNode(myXYZWidgets[0]);
... // Now I have my Dojo widget, I can upate to my heart's content
}
这行得通,我没有看到这样做有任何重大缺点,但这可以吗?还是这很糟糕?社区中了解 Dojo 的任何人都可以确认此解决方案或提出更好的解决方案吗?