私はこのJavaScriptクラス(必要な部品を削減)があります。今更新多くのラファエル論文
function DigitalChannel ($xmlDoc) {
var self = this;
// Parse definition from $xmlDoc
self.firstRender = function (rootElem) {
var html = ""; // Build HTML string to display object information
rootElem.html (rootElem.html() + html); // Make above HTML visible
self.paper = Raphael ("digDot" + self.numIndex, 54, 38);
self.svgImage = self.paper.circle (30, 20, 15).attr ({
"stroke-width": "2",
"stroke": "#000000",
"fill": "#00FF00"
});
}
self.updateStatus = function (newState) {
self.state = newState;
if (self.state !== self.normalState) {
self.svgImage.attr ("fill", "#FF0000");
}
else {
self.svgImage.attr ("fill", "#00FF00");
}
}
}
を、私はこのことを確認した(私の方法で使用されるすべての変数がXMLデータから適切に初期化されたと仮定してくださいFirebugの場合です)。デジタルチャンネルは、0または1の値を持つことができ、通常の値0または1を持つことができます。現在の値が通常の値と一致する場合は、描かれる円を緑、そうでなければ赤にします。その後、私はこのクラスをしている:だからこの時点で、私は必要なすべてを定義している
function PageManager() {
var self = this;
self.base_url = "http://" + location.hostname + "...";
self.digital_channels = new Array();
var fullPath = self.base_url + "...";
$.ajax (fullPath,
{
type: "post",
cache: true,
context: self,
success: function (data) {
$xmlDoc = $($.parseXML (data));
$xmlDoc.find ("channel").each (function() {
self.digital_channels.push (new DigitalChannel ($(this)));
});
}
});
self.firstRender = function() {
for (i in self.digital_channels) {
self.digital_channels[i].firstRender ($("#rootElem"));
}
}
self.updateDigitals = function() {
var fullPath = self.base_url + "...";
$.ajax (fullPath,
{
type: "post",
cache: true,
context: self,
success = function (data) {
var digital_idx = 0;
var mask = 0x0001;
$xmlDoc = $($.parseXML (data));
$xmlDoc.find ("digital_inputs").each (function() {
var bits = parseInt ($.trim ($(this).text()));
for (i = 0; i < 32; i++) {
self.digital_channels[digital_idx].updateState (bits & mask);
bits = bits >>> 1;
digital_idx += 1;
}
});
}
});
}
}
、その後、私はこれを行う:
再びvar pageManager = new PageManager();
pageManager.firstRender();
pageManager.updateDigitals();
、すべてが正しい順序で起こることを前提としています。実際のクラスはもっと複雑で、適切な時間の前に何も呼び出されません。私はFirebugを使ってすべてを進めてきましたが、今は私が望んでいるのはpageManager.firstRender();
の後にある64個の緑色の点のページです。 pageManager.updateDigitals();
と呼ぶと、最初の32ドットが緑色になり、次の32ドットが赤色に変わるのがわかります。私はコード内ですべてが内部的にOKになったのを見たことがあります。DigitalChannel.updateState (newState);
の色が実際にsvgImage
の円に変わってしまっています。しかし、最後のドットだけが視覚的に色を変える。私はこのような長い質問をお詫びしますが、なぜ誰にも分かりませんか?
私が言ったように、すべてがXMLから適切に解析されているので、簡潔にするために省略しました。私はJSを踏んで、 'if/else'が正しく評価され、' fill'属性が 'svgImage'変数内で変化するのを見ることができます。 – Nik
ajaxを読み込んだXMLの内容は何ですか? – James
それは無関係です。 XMLは正しいです。再び、私はすべてのコードをステップ実行して、すべてのコードがJavascriptの 'fill'属性を変更するまで正しく動作するように見えますが、変更は画面に表示されません。 – Nik