ボタンが押されたときにデータベース情報をリストに表示するSignalRデモを実行しています。
My Hubには2つの機能があります。1つはリストからDBオブジェクトを削除する機能で、もう1つはそのリストにDBオブジェクトを再追加する機能です。
これらの機能はビューで実行され、ページを1回だけ開いたときに優れたパフォーマンスを発揮します。しかし、別のタブ(同じブラウザでも別のブラウザでもかまいません)でページを開くと、ページの同期が維持されません。つまり、一方のページのボタンを押すと、もう一方のページにデータが正しく表示されません。
多くの場合、一方のページは正常に機能し、もう一方のページは削除を実行しますが、追加は実行しません。それは気が遠くなるようなものです。それらは私の理解からの相互の反映であるべきです。
他の誰かが似たようなものに遭遇しましたか?助けてくれてありがとう!
これが私のハブです:
[HubName("hubtest")]
public class HubTest : Hub
{
CmsContext db = new CmsContext();
public void showdata()
{
var f = from x in db.Data
select x;
Clients.remove();
Clients.add(f);
}
}
そして、これが私のビューの関数のjavascriptです:
<script src="Scripts/jquery-1.6.4.min.js" type="text/javascript"></script>
<script src="Scripts/jquery.signalR-0.5.2.min.js" type="text/javascript"></script>
<script src="/signalr/hubs" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
var hubtest = $.connection.hubtest;
hubtest.remove = function () {
//clear list of any prior values
var list = document.getElementById('dataList');
while (list.hasChildNodes()) {
list.removeChild(list.childNodes[0])
}
};
hubtest.add = function (data) {
//populate with updated values
for (var i = 0; i < data.length; i++) {
var element = data[i];
$('#dataList').append('<li>' + element.Question + '</li>');
}
};
$("#broadcast").click(function () {
hubtest.showdata();
});
// Start the connection
$.connection.hub.start();
});
</script>
<input type="button" id="broadcast" value="broadcast" />
<ul id="dataList">
</ul>