1

私はDurandalを初めて使用しますが、jQueryと少しのKnockoutJSのバックグラウンドを考慮すると、優れたフレームワークだと思います。ただし、DurandalでRequireJSを使用する2つの異なる方法に出くわしました。

Durandalサンプルでは、​​次の構文が使用されます: Durandal / App / samples / modal / index.js

    define(['durandal/app', './customModal'], function (app, CustomModal) {

    return {
        showCustomModal: function() {
            app.showModal(new CustomModal()).then(function(response) {
                app.showMessage('You answered "' + response + '".');
            });
        }
    };
});

ここで、依存関係/要件(ここで正しい単語ですか?)は、define(['durandal/app', './customModal'])の呼び出しの最初の引数として定義されます。

Durandalのドキュメントでは、次の構文が使用されています。モジュールの作成

define(function(require){
  var backend = require('backend');

  return {
    customers:ko.observableArray([]),
    activate:function(){
      var that = this;
      return backend.getCustomers().then(function(results){
        that.customers(results);
      });
    }
  };
});

ここでは、関数のみがdefineの呼び出しに渡され、requireはその関数の依存関係/要件として使用されます。次に、require関数が呼び出され、必要な実際の依存関係/要件(var backend = require('backend');)が取得されます。

.net IoCのバックグラウンドから来ると、最初は正しいように見え、要件を定義し、requirejsフレームワークに依存関係を見つけさせ、2番目はサービスロケーターのアンチパターンのように見えます。

これらの2つの方法の私の解釈は正しいですか、最初の方法を使用する必要があり、ドキュメントは間違っています(!)?

そうでない場合、これら2つの方法の長所/短所は何ですか?どちらを使用することをお勧めしますか、またその理由は何ですか?

どうもありがとう

4

2 に答える 2

3

私はあなたが一番好きな方法が行く方法だと思います。requirejsがそれを作ったので、commonjsモジュール形式をサポートできるように両方の方法を実行できると思います。

デュランダルが依存関係を解決する方法を使用する場合、requirejsのサイトによると:

define(function(require) { var app = require('durandal/app');  app.start(); }

「このラッパーは、Function.prototype.toString()に依存して、関数の内容の有用な文字列値を提供します。これは、PS3や一部の古いOperaモバイルブラウザーなどの一部のデバイスでは機能しません。」--requirejsから引用

しかし、それはあまり多くの人が気にしないと思うエッジケースです。それ以外は..私はあなたに最も適したものを選ぶでしょう。

サービスロケーターのアンチパターンが何を意味するのかわかりません。私は両方の方法が有効であると確信しています、そしてとにかくあなたがそれをすることを選ぶのは純粋に美学のためです。

編集**

Durandalは、依存関係を解決するために上記のパターンを使用しなくなりました。現在、次のように使用しています。

define(['./app','./system'], function (app, system) { //... });
于 2013-03-25T16:34:09.943 に答える
0

どちらの方法も正しいです。[JSのドキュメントが必要]をご覧ください。Durandal JSは、JQuery、Knockout、およびRequireJSに基づいて構築されています。このブログ投稿に目を通します。

于 2013-03-28T18:59:03.183 に答える