0

異なる PHP ベースの CMS (Wordpress、Joomla など) 間でアプリケーションを移植する作業を行っています。これらの各プラットフォームでコードを変更せずに実行できるようにするいくつかのクラスを定義しました (この部分はうまく機能しています)。私に問題を与えている部分の 1 つは、これらのプラットフォーム間にいくつかの JavaScript の違いが存在するという事実です。たとえば、ajax リクエストを呼び出す URL はプラットフォームごとに異なります。

質問: Javascript レベルでこのようなプラットフォームの違いに対処する最善の方法は何ですか? プラットフォームごとに異なるバージョンの ajax.js を作成することもできますが、これにより不要なコードの重複が発生し、特に ajax URL の約 20 インスタンスのみが変更されるため、将来の開発と保守がより困難になります。

たとえば、Ajax URL を定義するプラットフォーム固有の JS ファイルをロードし、その変数をメインの ajax.js ファイルに保持する方法はありますか? これで問題は解決しますが、これが JS で可能かどうかはわかりません。このような状況をエレガントに処理できるように、そのような問題をパラメータ化するための他の良いオプションはありますか?

4

2 に答える 2

1

私は通常、何らかのアダプター オブジェクトを使用してこれを処理します。つまり、クロスプラットフォーム コードが呼び出すことができるインターフェイスを定義し、そのインターフェイスのプラットフォーム固有の実装を挿入します。だから、例えば...

<script src="adapter.php"></script>
<script src="app.js"></script>

app.jsすべてのアプリケーションで共有される JS コードはどこにありますか。簡単な例を挙げると、次のようになります。

var App = {
  checkin: function() {
    Adapter.send('GET', Adapter.CHECKIN_URL + '?user=' + user)
  }
}

一方、adapter.php(またはadapter.pyまたはadapter.rb、または実行したいサーバー側コード)エンドポイントは、プラットフォーム固有の状態を返すサーバー側コードです。たとえば、次のいずれかのスクリプトにリダイレクトできます。

アダプター-New.js:

var Adapter = {
  CHECKIN_URL: '/rest/checkin',

  send: function(method, url) {
    // Maybe we have jquery available in this case
    $.ajax({type: method, url: url});
  }
}

アダプター-Old.js:

var Adapter = {
  CHECKIN_URL: '/old_api_checkin',

  send: function(method, url) {
    // And pretend there's no jquery in this case
    var xhr = new XMLHttpRequest();
    xhr.open(method, url);
    xhr.send();
  }
}

(これは明らかに、非常に不自然で単純化されたバージョンですが、うまくいけば、一般的なアイデアが得られることを願っています。)

于 2013-11-13T13:08:17.650 に答える