6

BoilerplateJsの例に関して、ユーザーが1つのモジュールに変更を加えたら、他の関連モジュールをその変更で更新する必要があるように、これらのモジュールを相互通信するように調整するにはどうすればよいですか。

たとえば、ユーザーから名前と売上として入力を取得するモジュールと、取得したデータを表やグラフで更新するモジュールがある場合、イベント処理を考慮してこれらの相互接続がどのように発生するかを例を挙げて説明できますか?

ありがとう!!

4

2 に答える 2

3

BoilerplateJSでは、各モジュールに独自のmoduleContextオブジェクトがあります。このモジュールコンテキストオブジェクトには、「listen」と「notify」の2つのメソッドが含まれています。詳細については、「/ src / core/context.js」のコンテキストクラスを参照してください。

イベントを「リッスン」する必要があるコンポーネントは、イベントの名前とコールバックハンドラーを指定して、イベントに登録する必要があります。イベントを発生させるコンポーネントは、「notify」メソッドを使用して、何か面白いことが起こったことを他の人に知らせる必要があります(オプションでパラメーターを渡します)。

GitHubから最新のBoilerplateJSコードの更新を取得します。clickCounterを複合コンポーネントにして、「clickmeコンポーネント」がイベントを発生させ、「宝くじコンポーネント」がイベントをリッスンして応答するように変更をコミットしました。

イベントを通知するためのコード:

moduleContext.notify('LOTTERY_ACTIVITY', this.numberOfClicks());

イベントを聞くためのコード:

moduleContext.listen("LOTTERY_ACTIVITY", function(activityNumber) {
   var randomNum = Math.floor(Math.random() * 3) + 1;
   self.hasWon(randomNum === activityNumber);
});
于 2012-09-13T04:45:01.880 に答える
0

AmplifyなどのPublish-Subscribeライブラリの使用を検討します。この手法を使用すると、1つのモジュールがイベントの発行者として機能し、他のモジュールがサブスクライバーとして登録し、これらのイベントを高度に分離された方法でリッスンして応答することが容易になります。

すでにKnockoutを使用しているので、最初にRyanNiemeyerのノックアウトポストボックスプラグインを最初に試すことに興味があるかもしれません。デモフィドルなど、このライブラリの背景情報はこちらから入手できます。必要に応じて、後でいつでもAmplifyに切り替えることができます。

于 2012-09-12T22:48:09.257 に答える