Widziałem podobne posty w internecie i nikt nie sugerował dla mnie prac. Naprawdę mam do czynienia z wyborem zrzucania jednego lub drugiego, jak się wydaje w tym momencie.Po prostu nie można utworzyć SignalR (asp.net mvc4) i require.js współpracują ze sobą
Ten "Pierwsze kroki z SignalR i MVC 4 Samouczek":
http://www.asp.net/signalr/overview/getting-started/tutorial-getting-started-with-signalr-and-mvc-4
mówi trzeba dwa skrypt obejmuje aby praca signalR:
<!--Reference the SignalR library. -->
<script src="~/Scripts/jquery.signalR-1.0.1.js"></script>
<!--Reference the autogenerated SignalR hub script. -->
<script src="~/signalr/hubs"></script>
jestem ze stratą jak sprawić, by drugi, autogenerowany skrypt pisma SignalR, wystąpił w require.js. Chyba że czegoś mi brakuje, wydaje mi się, że nie ma w nim wydajnej składni require.js do włączenia autogenerowanych skryptów. Bez niej dostać ten błąd na linii 159 jquery.signalR-1.1.2.js:
"Javascript Runtime error: SignalR. Error piast załadunku Zapewnienie koncentratorów odniesienia jest prawidłowe, na przykład"
kodu w tym momencie w jquery.signalR to robi:
signalR.hub = {
start: function() {
// This will get replaced with the real hub connection start method when hubs is referenced correctly
throw new Error("SignalR: Error loading hubs. Ensure your hubs reference is correct, e.g. <script src='/signalr/hubs'></script>.");
}
};
ktoś faktycznie to wygenerowany automatycznie przez skrypt rzeczą zdarzyć require.js?
Nauczyłem się tego trochę więcej. Pozwolę sobie dodać kilka szczegółów:
Używam tego podejścia - Strukturyzacja skalowalnych aplikacji po stronie klienta: (http://johndavidmathis.wordpress.com/2013/04/23/structuring-scalable-client-side-applications/) w celu uzyskania bardziej skalowalnej struktury. Druga część z tej serii "Pozwól modułom wykorzystywać wiele plików i strukturę folderów logicznych" pozwala mi podzielić mój rzeczywisty kod signalr na oddzielny moduł czatu Marionette (oddzielny od mojego głównego pliku app.js), aby uzyskać lepszą strukturę plików. Bardzo podoba mi się to podejście. Reszta mojego projektu jest teraz tak skonfigurowana i naprawdę pokazuje korzyści, jeśli chodzi o znajdowanie kodu. Myślę, że dodatkowy podział to miejsce, w którym utknąłem. Nie można uzyskać tej drugiej zależności, automatycznie wygenerowanego skryptu, do tego osobnego pliku modułu czatu. Nadal studiuję to, ale w tym momencie wygląda mi to na rękę. require.js dostaje zależność w mojej aplikacji Marionetek:
require(["marionette","handlebars", "signalr", "signalr.hubs"], function (Marionette) {
window.App = new Marionette.Application();
App.addRegions({
headerRegion: "#header",
contentRegion: "#content",
footerRegion: "#footer",
});
require(["modules/main/loader", "modules/chat/loader"], function() {
App.start();
});
})
Jeśli chcę rozmawiać tę zależność, aby jego sposób dalej w aplikacji do modułu czatu w innym pliku?
Coś jak?
define(dependencies,
function() {
App.module("ChatModule", function (ChatModule, App, Backbone, Marionette, $, _, "signalr.hubs", "signalr.hubs") {
// SignalR Proxy created on the fly
var chat = $.connection.chatHub;
// Start the connection
$.connection.hub.start();
//more chat code...
Aktualizacja:
Poniższa odpowiedź działa w moim środowiska dev. Ale to nie działa, kiedy publikuję kod na prawdziwym serwerze produkcyjnym.
Po opublikowaniu kodu na prawdziwym serwerze produkcyjnym (usługi IIS 6.1 w systemie Windows Server Enterprise 2008 R2) konsola przeglądarki po raz kolejny wyświetla "404" dla automatycznie generowanego odwołania.
W szczególności konsola pokazuje "?" jest dodawany do ścieżki referencyjnej przed ".js", tak ...
http://mydomain.com/myapp/Scripts/application/signalr/hubs?.js ...
Próbowałem wziąć "?" ale potem usuwa nazwę mojej aplikacji ze ścieżki, tak ...
http://mydomain.com/signalr/hubs.js.
myślę, co by mnie tam jest pierwszy, bez „?”, Jak ...
http://mydomain.com/myapp/Scripts/application/signalr/hubs.js
ja po prostu nie widząc, jak sprawić, by tak się stało.
FINAL UPDATE:
końcowy element układanki na serwerze produkcyjnym jest katalog wirtualny witryny. Oto ostatni kod, który zadziałał dla mnie. Dzięki Raciel R za pomoc:
requirejs.config({
paths: {
//core
"jquery": "jquery-1.9.1",
"signalr": "jquery.signalR-1.1.2",
"signalr.hubs": "/productionservervirtualdirectory/signalr/hubs?"
},
shim: {
"jquery": {exports: "$"},
"signalr": { deps: ["jquery"] },
"signalr.hubs": { deps: ["signalr"] }
});
//Then all you have to do is to make signalr.hubs required in your modules. Ie:
require(["signalr.hubs"], function(){
//your code here
});
Zadzwoniłeś do MapHubs na serwerze? Zobacz pytanie: http://stackoverflow.com/questions/16235175/404signalr-hubs-for-signalr-chat-application/16242594#16242594, jest to rodzaj odwrotności tego, na co masz ochotę, ale powinien odpowiedzieć na twoje pytanie. –
Tak. Zrobił to. Nie ma kości. Problemem wydaje się być szczególnie brak składni require.js, aby utworzyć drugie odniesienie - do autogenerowanego skryptu SignalR hub. Widzę ludzi, którzy podejmują różne próby składni. Próbowałem ich wszystkich, ale żaden z nich nie pracował dla mnie. Ten poniżej też mi nie pasował. – Robert