6

私はウェブ上で同様の投稿を見てきましたが、誰も私のために働くことを提案していません. この時点で、どちらかをダンプするという選択に本当に直面しています。

この「SignalR と MVC 4 入門チュートリアル」:

http://www.asp.net/signalr/overview/getting-started/tutorial-getting-started-with-signalr-and-mvc-4

signalR を機能させるには、2 つのスクリプト インクルードが必要です。

    <!--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>

2 つ目の自動生成された SignalR ハブ スクリプトを、require.js で実行する方法がわかりません。何かが欠けていない限り、自動生成されたスクリプトを含めるための実行可能なrequire.js構文はないようです。これがないと、jquery.signalR-1.1.2.js の 159 行目で次のエラーが発生します。

"JavaScript ランタイム エラー: SignalR: ハブの読み込み中にエラーが発生しました。ハブの参照が正しいことを確認してください。"

jquery.signalR のその時点でのコードはこれを行っています。

    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>.");
        }
    };

この自動生成されたスクリプトを実際にrequire.jsで実現した人はいますか?

これはもうちょっと勉強中。詳細を追加しましょう。

私はこのアプローチを使用しています-スケーラブルなクライアント側アプリケーションの構造化: ( http://johndavidmathis.wordpress.com/2013/04/23/structuring-scalable-client-side-applications/ ) よりスケーラブルな構造を作成します。そのシリーズの第 2 部「モジュールが複数のファイルと論理フォルダー構造を利用できるようにする」http://johndavidmathis.wordpress.com/2013/04/23/structuring-scalable-client-side-applications/より良いファイル構造を実現するために、実際のシグナル コードを別の Marionette チャット モジュール (メインの app.js ファイルとは別) に分割する必要があります。私はこのアプローチがとても好きです。私のプロジェクトの残りの部分は現在このように設定されており、コードを見つけることに関しては本当に利点を示しています. 余分な分割が私が行き詰まっているところだと思います。2 番目の依存関係である自動生成されたスクリプトを別のチャット モジュール ファイルに入れることができないようです。私はまだこれを勉強していますが、現時点ではこのように見えます。require.js は、私の Marionette アプリに依存関係を取得します。

    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();
        });
    })

その依存関係をチャットして、アプリ、別のファイルのチャット モジュールに進めたい場合はどうすればよいですか?

何かのようなもの?

    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...

アップデート:

以下の答えは、私の開発環境で機能します。しかし、実際の運用サーバーにコードを公開すると機能しません。

コードが実際の運用サーバー (Windows Server Enterprise 2008 R2 上の IIS 6.1) に発行されると、ブラウザー コンソールは、自動生成された参照に対して再び "404" を表示します。

具体的には、コンソールに「?」が表示されます。このように、「.js」の前に参照パスに追加されています...

http://mydomain.com/myapp/Scr​​ipts/application/signalr/hubs?.js ...

「?」を取ってみた アウトしますが、このようにパスからアプリ名を削除します...

http://mydomain.com/signalr/hubs.js

「?」のない最初のものはどうすればそこにたどり着くと思いますか...

http://mydomain.com/myapp/Scr​​ipts/application/signalr/hubs.js

私はそれを実現する方法を見ていません。

最終更新:

運用サーバーのパズルの最後のピースは、サイトの仮想ディレクトリです。これが私のために働いた最終的なコードです。Raciel R さん、ご協力ありがとうございます。

    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
    });
4

2 に答える 2

11
requirejs.config({        
    paths: {
        //core
        "jquery": "jquery-1.9.1",

        "signalr": "jquery.signalR-1.1.2",
        "signalr.hubs": "/signalr/hubs?"
    },
    shim: {
        "jquery": {exports: "$"},            
        "signalr": { deps: ["jquery"] },
        "signalr.hubs": { deps: ["signalr"] }
    });

あとは、モジュールで signalr.hubs を必須にするだけです。すなわち:

require(["signalr.hubs"], function(){
     //your code here
});
于 2013-08-02T20:04:42.723 に答える
2

@raciel-r のソリューションを使用して RequireJS を正常にセットアップしましたが、動的プロキシによって混乱するカルマなどの他の JavaScript モジュールにまだ問題がありました。シグナル プロキシを静的ファイルに変換し、代わりにそれを RequireJS で使用しました。

  1. 輸入Microsoft.AspNet.SignalR.Utils

  2. SignalR ハブを含むアセンブリを含むディレクトリはpackages/Microsoft.AspNet.SignalR.Utils.2.X.X/tools/signalr.exe ghp /path:my/bin /o:path/to/scripts/server.jsどこで実行します。/my/bin

  3. /signalr/hubsへの参照を次のように置き換えますserver

    requirejs.config({        
    paths: {
         // ...
         "signalr.hubs": "path/to/scripts/server"
    },
    //  ....
    
  4. 生成されたプロキシの便利なメソッドを使用している場合は、それらも書き換える必要があります (「SignalR で生成されたプロキシの物理ファイルを作成する方法」を参照) 。

于 2015-05-14T21:40:21.207 に答える