抽象的なコントロールから継承するUIコントロールを持っています。抽象的なコントロールで を継承しています。すべてのコントロールがtrue/falseを返すisValidというメソッドを拡張する必要があり、 ) これを赤色(非有効な場合)にするかどうかを知るには、この場合私がこれを助けるために使用すべき設計パターンがありますか、どのアプローチを使用すべきですか?コントロールからフレームワークにステータスを送信
答えて
純粋なJavascriptで開発している場合(ReactやAngular、jQueryはありません)、DOM要素で使用可能な既存のObserver Patternを使用して変更を更新します。
要約パーツ:
// Create the basic AbstractControl class.
var AbstractControl = function() {
}
// Virtual methods.
AbstractControl.prototype.isValid = function() {
throw new Error('Not implemented.')
}
AbstractControl.prototype.paintGreen = function() {
// Valid case.
throw new Error('Not implemented.')
}
AbstractControl.prototype.paintRed = function() {
// Invalid case.
throw new Error('Not implemented.')
}
// Function Update verifies the validity of the control and calls
// the valid or invalid case accordingly.
AbstractControl.prototype.update = function() {
if (this.isValid()) {
this.paintGreen();
} else {
this.paintRed();
}
}
そして、例えば、具体的な制御クラス:
// Class for an email input text field, receives a DOM element.
var EmailField = function(element) {
AbstractControl.call(this, AbstractControl);
this.element = element;
// Listens for change events on the element and updates
// the valid/invalid status.
this.element.addEventListener("change", this.update.bind(this));
}
// Setup inheritance.
EmailField.prototype = Object.create(AbstractControl.prototype);
EmailField.prototype.constructor = EmailField;
// Implement virtual methods.
EmailField.prototype.isValid = function() {
return this.element.value.indexOf("@") >= 0;
}
EmailField.prototype.paintGreen = function() {
alert("Email correct. Proceed.")
}
EmailField.prototype.paintRed = function() {
alert("Email Incorrect! May not proceed.")
}
最終使用:
new EmailField(document.getElementById("emailfield"));
そして、それはすべての変更にalert
は、フィールドの内容に応じたでしょう。 alert
を変更して(機能名に示されているように)要素の色を変更するか、アイコンまたはツールチップを表示することができます。
JSFiddle:https://jsfiddle.net/surj64vy/(リアルタイムで変更を取得するより多くのイベントを使用して、文字通りの代わりに警告のフィールドを塗る)
私は100%の質問をよく理解していません。この回答は役に立ちますか? – BoppreH
1+ありがとう、これは多かれ少なかれ2つの質問です。1.具体的なクラスからイベントを送信するにはどうすればよいですか?私はjsFiddlleでそれを使用しようとすると、それは私のために働くdoesntあなたjsBIn /フィドル...または何かとしてそれを送信してくださいできますか?私はそれをテストしたいと思いますありがとう! –
1.各変更に対して 'update'メソッドが既に呼び出されており、イベントに応答することができます。 2.確かに、ここにそれがあります:https://jsfiddle.net/surj64vy/ – BoppreH
- 1. zendフレームワーク2のlocalhostからメールを送信できません
- 2. SMSの送信ステータスの確認iPhone
- 3. 2つのコントロール値をコンバーターに送信
- 4. 他のコントロールにキーストロークを送信する
- 5. フォームからコントロールにKeyEventを送る
- 6. iPhoneからマイクロコントローラに信号を送信
- 7. activemq-cppステータスを送信または受信する方法を得るには
- 8. Javaからメールを送信
- 9. MVVMLightからコマンドを送信
- 10. "データベースから"メールを送信
- 11. yiiからメールを送信
- 12. ローカルホストからhttprequestを送信
- 13. Magentoからメールを送信
- 14. webmethodからエラーメッセージを送信
- 15. bugzillaからSMSを送信
- 16. drop_receiving_elementからパラメータを送信
- 17. Azureからメールを送信
- 18. デスクトップアプリケーションからSMSを送信
- 19. BroadcastReceiverからSMSを送信し、ステータスを確認するにはどうすればよいですか?
- 20. Magento - 注文ステータスが異なるメールを送信する
- 21. サーバ(java)からアンドロイドクライアントにデータを送信
- 22. コンソールからmvcにファイルを送信
- 23. PythonからJavascript(JSON)にデータを送信
- 24. ローカルホストからGmailにメールを送信
- 25. WP7からPCにデータを送信
- 26. データオブジェクトをフラグメントからアクティビティに送信
- 27. テーブルセルからデータベースにデータを送信
- 28. XAMPP(MYSQL)からandroidにデータを送信
- 29. アンドロイドアプリケーションからlocalserver sqlにデータを送信
- 30. ツイスト - サーバーからクライアントにデータを送信
は、私にはかなり固体に聞こえます。あなたは[codereview.se]にあなたのコードを投稿して、堅実なレビューを得ることができます。 –
@ MadaraUchiha - ありがとう、しかし、私はそれを実装しようとする前に正しいアプローチを見つけたいと思っています:)どのような提案? –
ここにデザインパターンをくりかける必要はありません - これは簡単な多形性です。 – dbugger