Signalr股票样本操纵
我已经下载了SignalR Sample并进行了测试。它像一个魅力。出于测试目的,我创建了一个使用单页模板的新mvc 4应用程序,并在样本中添加了包含StockTicker.html html的部分视图。我正在动态加载这个局部视图作为jquery ui选项卡的一个选项卡。我也添加了其他必需的文件。Signalr股票样本操纵
当我调试应用程序时,我发现可以在SignalR.StockTicker.js文件中找到的下面的脚本在视图加载之前工作。
$.connection.hub.start()
.pipe(init)
.pipe(function() {
return ticker.server.getMarketState();
})
.done(function (state) {
if (state === 'Open') {
ticker.client.marketOpened();
} else {
ticker.client.marketClosed();
}
// Wire up the buttons
$("#open").click(function() {
ticker.server.openMarket();
});
$("#close").click(function() {
ticker.server.closeMarket();
});
$("#reset").click(function() {
ticker.server.reset();
});
});
所以函数init不能做它必须做的dom操作。
function init() {
return ticker.server.getAllStocks().done(function (stocks) {
$stockTableBody.empty();
$stockTickerUl.empty();
$.each(stocks, function() {
var stock = formatStock(this);
$stockTableBody.append(rowTemplate.supplant(stock));
$stockTickerUl.append(liTemplate.supplant(stock));
});
});
}
如何让我的代码正常工作? Here你可以找到我的测试项目。
由于提前,
你需要使用jQuery UI选项卡load事件,而不是文件为此做好准备(因为标签内容后文件准备异步触发加载)。修改你的代码是这样的:
- 添加某种识别到你的“外汇”选项卡(如
<li id="forex"><a href="/Forex">Forex</a></li>
) -
变化
$(function(){//init code here})
你的“SignalR.StockTicker.js”到一个函数内部,你可以调用自己(I称之为initStockTicker
):$(function() { var ticker = $.connection.stockTicker, // the generated client-side hub proxy ... });
=>
function initStockTicker() { var ticker = $.connection.stockTicker, // the generated client-side hub proxy ... }
-
添加
load
处理程序到你的标签初始化:$("#marketWatchTabs").tabs({ load: function (event, ui) { if (ui.tab.is("#forex")) { initStockTicker(); } } });
但是,包含StockTicker.html的html的部分视图在加载容器视图后动态加载。 – anilca 2013-04-11 12:32:12
你可以发表更多的代码,然后请?什么_exactly_不起作用? – pfyod 2013-04-11 12:36:58
在动态加载标签内容后,您可能想要调用'SignalR.StockTicker.js'的'$(function(){...})'中的所有内容。在你的情况下,如果可能意味着有'init'函数包含'SignalR.StockTicker.js'中的所有内容并在[load]上调用它(http://api.jqueryui.com/tabs/#event-load )事件在jQuery UI的选项卡中。 – pfyod 2013-04-11 12:48:04
我添加了一个链接到我的测试项目。你可以在我的问题结束时找到它。 – anilca 2013-04-11 12:50:12