WebSocket を使用して作成している Web アプリケーションに Dojo 1.9 を使用しています。クライアントがサーバーからメッセージを受信したら、受信したデータで特定のウィジェットを更新する必要があります。
// 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 の知識を持っているコミュニティー内の誰かが、この解決策を確認したり、より良い解決策を提案したりできますか?