問題タブ [delegation]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
wcf - Kerberos を使用しない WCF カスタム委任/認証
NTLMセキュリティを使用して、おそらくHTTPS経由で公開される単純なWCFサービスを構築しています。すべてのユーザーがサービスを直接使用できるわけではないため、サービス用の単純な Web フロントエンドを作成しています。ユーザーは Web フロントエンドに対して HTML で認証します。
私たちが必要としているのは、Web サイトのユーザーを WCF サービスに委任する方法です。Kerberos 委任がこれを行うことができることは理解していますが、それは私たちには利用できません。
私がやりたいことは、Web フロントエンド アカウントを特別に信頼できるアカウントにすることです。これにより、要求が "DOMAIN\WebApp" として認証された WCF サービスにヒットした場合、実際の ID を含む WCF メッセージ ヘッダーを読み取り、プリンシパルを切り替えます。それに、通常どおり続行します。
これを達成する「簡単な」方法はありますか?このアイデアを完全にあきらめて、代わりにユーザーを WCF アプリに「サインイン」させてから、完全なカスタム認証を行う必要がありますか?
WCF の拡張性とセキュリティ オプションは非常に広範囲に及ぶように思われるので、どの道を進むべきかについて頭を悩ませたいと思います。
編集:確かに、WindowsIdentity だけがグループ メンバーシップ チェックを実行するようにします。完全な偽装トークンは必要ありません。ID トークンだけが必要です。
javascript - innerHTML とイベント委任
innerHTML を使用して 25 ミリ秒ごとに更新される複数の div を含む div があります (パフォーマンス上の理由から)。イベント委任を使用してイベントをキャプチャしようとしましたが、クリック イベントをキャプチャするようには見えません。これは、コンテンツの更新速度のせいではないかと思います。どんなアイデアでも大歓迎です。
私のコード:
c++ - プライベート パーツへの委任
ときどき、C++ のプライバシーの概念に当惑することがあります :-)
Foo::Bar
ですので、private
では宣言できません。それでも、問題なくメソッドを呼び出すことができます。なんでこんなの許されるの?それは偶然ですか、それとも意図的なものですか?b
main
Foo::Bar
ちょっと待ってください。
type に名前を付けることは許可されていませんが、 ...Foo::Bar
で問題なく動作します。auto
ノアは次のように書いています。
クラス定義内で定義された型名は、修飾せずにクラス外で使用することはできません。
楽しみのために、外部から型を取得する方法を次に示します。
c# - C#イベントのリスニングとユーザーコントロールを支援する
OK、リストビューのあるページがあります。リストビューのアイテムテンプレート内には、ユーザーコントロールがあります。このユーザーコントロールは、ホスティングページがイベントをリッスンできるようにイベントをトリガーしようとしています。私の問題は、ハンドラーがnullであるため、イベントがトリガーされないことです。(つまり、EditDateRateSelectedは私のハンドラーであり、デバッグ時はnullです)
listvewのアイテムデータバウンドには、イベントハンドラーを追加する場所があります
コントロールがページ内にあり、ページの読み込み時に次の行がある場合、私のイベントコードはすべて正常に機能します。
しかし、明らかに、listviewcontrols内のイベントをリッスンする必要があります。
アドバイスをいただければ幸いです。リストビューに対してEnableViewStateをtrueに設定しようとしましたが、違いはありません。コントロールハンドラーを配線することになっている他の場所はありますか?
注-用語が間違っていて、デリゲートをハンドラーなどと呼んでいる場合は、お詫びします:)
ios - UIViewlayoutSubviews委任
UIViewのlayoutSubviewsの責任を委任するためのサポートが必要だと思います。これは、layoutSubviewsメソッドを実装するためだけに特定のサブクラスを作成する必要がないようにするためです。私がこの代替案を望んでいることに気付いた理由は、UIKitの基本的な設計上の考慮事項を見逃したためか、それとも?または、このタイプのレイアウト委任をサポートする独自のUIViewサブクラスを作成する必要がありますか?
c++ - C ++の質問:Obj-Cプロトコルに似た機能?
私は自分のコードでObjective-Cプロトコルを使用することに慣れています。彼らは多くのことで信じられないほどです。ただし、C ++では、同じことを実現する方法がわかりません。次に例を示します。
- 関数setDelegate(Protocol * delegate)を持つテーブルビュー
- クラスClassのデリゲートですが、プロトコル「プロトコル」を実装しています
- クラスClass2のデリゲート、「プロトコル」も実装
- setDelegate(objOfClass)とsetDelegate(objOfClass2)は両方とも有効です
Obj-Cでは、これは十分に単純ですが、C++でそれを行う方法を理解できません。それも可能ですか?
javascript - jQueryのデフォルトを妨げずに親の委任ハンドラーを防ぐ方法は?
のデフォルトの動作を発生させながら(に移動して)<a>
、クリックがその親で委任されたクリックハンドラーをトリガーするのを防ぐ方法はありますか?<a>
href
これが私が求めていることを説明する例です。
そして私のJavaScript:
この場合、リンクをクリックしたときにgoogle.comに移動したいのですがalert("failure")
、途中で表示されてはなりません。
ソリューションにはいくつかの制限があります。
$(".top")
ページに何千ものイベントハンドラーがある可能性があるため、すべてのイベントハンドラーをから委任する必要があります。window.location = $(this).attr("href")
ナビゲーションは、または同様のものではなく、ブラウザのデフォルトの動作を使用して実行する必要があります
通常のイベントバインディングを使用してe.stopPropagation()
、のクリックハンドラーで実行できます<a>
が、委任の性質上、これは機能しません。jQueryは.stopImmediatePropagation()
、私が欲しいものを説明するという別のメソッドを提供します(現在の要素、この場合は委任されたハンドラーを保持する要素で他のハンドラーを防止します)が、この場合は実際には実行されません。それはのバグかもしれません.delegate()
、私にはわかりません。
のクリックハンドラーfalse
から戻ると、他のハンドラーが実行されなくなりますが、も実行されるため、ブラウザーはナビゲートしません。基本的に、私はそれが何をしないのか疑問に思っています。ドキュメントに基づいて、それらは同等である必要があります。<a>
.preventDefault()
return false;
e.stopImmediatePropagation(); e.preventDefault();
上記のコードのライブデモについては、JSFiddleをご覧ください:https ://jsfiddle.net/CHn8x/
iphone - NSXMLParser を使用して XML を解析するときのコードの再利用 (iPhone 開発者)
私が構築している iphone アプリケーションでは、ユーザーがロードしたときに多数のビュー コントローラーで XML を解析しています。
これを行うたびに、次のことを行っています。
- NSURLConnection の確立 (viewDidLoad 内)
- 取得したデータの保存とエラー処理 (コネクション デリゲート メソッド)
- NSXMLParser の作成
- XML の解析 (NSXMLParser デリゲート メソッド)
この問題に対するあなたのアプローチがどうなるか知りたいです。
私自身、いくつかのオブジェクト メソッドとそれに含まれるすべての NSURLConnection および NSXMLParser デリゲート メソッドを使用してidの単純なサブクラスを作成するつもりです。そのため、責任はこのサブクラスにあり、viewcontroller で簡単にインスタンス化できます。これは実行可能ですか、それともデリゲートをビュー コントローラーにする必要がありますか?
ありがとうございました
delphi - Delphi:インターフェイスの実装を子オブジェクトに委譲する方法は?
私は、特に複雑なインターフェースの実装を子オブジェクトに委譲するオブジェクトを持っています。これこそまさにの仕事だと思いますTAggregatedObject
。「子」オブジェクトは「コントローラ」への弱い参照を維持し、すべてのQueryInterface
リクエストは親に戻されます。IUnknown
これにより、常に同じオブジェクトであるルールが維持されます。
したがって、私の親 (つまり"Controller"IStream
) オブジェクトは、インターフェイスを実装することを宣言します。
注:これは架空の例です。私がこの単語を選んだのは、
Robot
複雑に聞こえるからです。また、単語の長さはわずか 5 文字で、短いためです。私もIStream
短いので選びました。IPersistFile
またはを使用するつもりでしIPersistFileInit
たが、それらは長くなり、サンプルコードを実現するのが難しくなります。言い換えれば、これは架空の例です。
これで、実装する子オブジェクトができましたIStream
:
残っているのはこれだけです。これが私の問題の始まりです。RobotStream
要求されたときに作成することです。
このコードはコンパイルに失敗し、エラーが発生しますOperator not applicable to this operand type.
。
これは、Delphi が をas IStream
実装していないオブジェクトに対してを実行しようとしているためIUnknown
です。
IUnknownメソッドが存在する可能性がありますが、オブジェクトはサポートしていることを通知しませんIUnknown
。インターフェイスがなければIUnknown
、DelphiQueryInterface
はキャストを実行するために呼び出すことができません。
だから私は自分のTRobotStream
クラスを変更して、欠落しているインターフェースを実装していることを宣伝します(それはそうです;それはその祖先から継承しています):
そして今、それはコンパイルされますが、次の行で実行時にクラッシュします:
何が起こっているかはわかりますが、その理由を説明することはできません。Delphi はIntfClear
、親Robot
オブジェクトで、子オブジェクトのコンストラクタの途中で を呼び出しています。
これを防ぐ適切な方法がわかりません。私はキャストを強制しようとすることができます:
参照を維持することを願っています。参照を保持していることがわかりました-コンストラクターの途中でクラッシュしません。
注:これは私にとって混乱を招きます。インターフェイスが必要な場所にオブジェクトを渡しているためです。私は、コンパイラが暗黙的に型キャストを実行していると仮定します。
Result := TRobotStream.Create(Self
IUnknownとして);
呼び出しを満たすために。構文チェッカーがエラーを出さなかったという事実から、すべてが正しいと思いました。
しかし、クラッシュは終わっていません。私は行を次のように変更しました:
そして、コードは確かにTRobotStream
私の親オブジェクトを破壊することなくのコンストラクターから戻りますが、スタックオーバーフローが発生します。
その理由は、TAggregatedObject
すべてQueryInterface
(つまり、型キャスト) を親オブジェクトに戻すことです。私の場合、 aTRobotStream
を anにキャストしていIStream
ます。
TRobotStream
の最後にそのことを尋ねるIStream
と:
向きを変え、コントローラーにIStream
インターフェイスを要求します。これにより、次の呼び出しがトリガーされます。
向きを変えて呼び出します:
ブーム! スタックオーバーフロー。
やみくもに、最終的な へのキャストを削除してIStream
、Delphi に暗黙的にオブジェクトをインターフェイスにキャストさせます (上記で見たものは正しく動作しません)。
そして今、クラッシュはありません。私はこれをあまり理解していません。複数のインターフェイスをサポートするオブジェクトを作成しました。Delphi がインターフェースをキャストすることを知っているのはどうしてでしょうか? 適切な参照カウントを実行していますか? 私はそうではないことを上で見ました。顧客のためにクラッシュを待っている微妙なバグはありますか?
だから私は私の1行を呼び出すために4つの可能な方法が残っています. どれが有効ですか?
Result := TRobotStream.Create(Self);
Result := TRobotStream.Create(Self as IUnknown);
Result := TRobotStream.Create(Self) as IStream;
Result := TRobotStream.Create(Self as IUnknown) as IStream;
本当の質問
かなりの数の微妙なバグに遭遇し、コンパイラの複雑さを理解するのが困難です。これにより、私はすべてが完全に間違っていると信じるようになります。必要に応じて、私が言ったことをすべて無視して、質問に答えるのを手伝ってください。
インターフェイスの実装を子オブジェクトに委任する適切な方法は何ですか?
TContainedObject
の代わりに使用する必要があるかもしれませんTAggregatedObject
。TAggregatedObject
おそらく、親が存在する必要があり、子が存在する場所で、2 つが連携して機能しTContainedObject
ます。多分それは逆です。この場合はどちらにも当てはまらないかもしれません。
注:私の投稿の主要部分はすべて無視できます。それは私がそれについて考えたことを示すためでした。私が試したことを含めることで、可能な答えを毒殺したと主張する人がいます。人々は私の質問に答えるのではなく、私の失敗した質問に集中するかもしれません。
本当の目標は、インターフェイスの実装を子オブジェクトに委譲することです。この質問には、問題を解決するための私の詳細な試みが含まれてい
TAggregatedObject
ます。私の他の 2 つのソリューション パターンも表示されません。そのうちの 1 つは循環参照カウントに悩まされており、 はIUnknown
等価規則を破っています。ロブ・ケネディは覚えているかもしれません。そして、私の解決策の問題の解決策ではなく、問題の解決策を求める質問をするように頼まれました。
編集:文法化
編集 2:ロボット コントローラーのようなものはありません。そうですね - 私はいつも Funuc RJ2 コントローラーを使っていました。しかし、この例では違います!
編集 3*
ここでの問題は、次の呼び出し中に「親」TRobot
オブジェクトが破棄されることです。
httpwebrequest - サイトが kerberos で認証されていることを確認する方法
dotnet で HttpWebRequest を使用しています。これを行うために委任 (偽装) を使用しています。
request.ImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Delegation;
webconfig ファイルで
ID 偽装 =「真」
なりすましにはKerberosが必要です...コードが401無許可エラーをスローするため、サイトがKerberosまたはNTLMを使用して認証するかどうかを確認する必要があります
これで私を助けてください!!!!!!!!!!!!!!!!