2

Microsoft AJAX JavaScript フレームワーク メソッドによってスローされる次のエラーをトラブルシューティングするにはどうすればよいですか? これは、Web フォーム アプリ (Sitefinity 5 CMS) のカスタム ユーザー コントロールから自動的に生成された JavaScript の行です。

エラーメッセージ:

未定義または null 参照のプロパティ 'FancyBlockDesigner' を取得できません

エラーをスローしている JavaScript は次のとおりです。

Sys.Application.add_init(function() {
    $create(SitefinityWebApp.Esd.TheLab.SampleHtmlEditor.FancyBlockDesigner, null, null, {"Editor":"propertyEditor_ctl00_ctl00_ctl00_ctl00_ctl00_Editor","propertyEditor":"propertyEditor"}, $get("propertyEditor_ctl00_ctl00_ctl00"));
});

この詳細を抽象化しようとする ascx および cs ファイルについて議論するよりも、このエラーの意味を知りたいです。詳細を理解すれば、抽象化はより理にかなっているかもしれません。

4

1 に答える 1

2

ASP.NET Ajax の「$create」関数は、JavaScript クラスのインスタンスを作成します。Microsoft は、JavaScript オブジェクト指向を作成する方法について独自の意見を持っていましたが、時間が経つにつれて、彼らのアプローチは完璧ではありませんでした。

とにかく、何が起こっているのかを説明するために、それがどのように機能するかについて少し概要を説明しましょう。まず、GetScriptDescriptors と GetScriptReferences の 2 つのメンバーを必要とするIScriptControlインターフェイスを実装するサーバー側コントロールから始めます。2 番目の方法は非常に簡単です。制御する必要があるすべての JavaScript ファイルへの参照を登録できます。一方、GetScriptDescriptors を使用すると、使用したい JavaScript クラスのすべてのインスタンスを定義できます。また、必要に応じて、それらのプロパティを設定 (初期化) することもできます。

貼り付けた自動生成された JavaScript コードは、基本的に、Editor プロパティを初期化する "SitefinityWebApp.Esd.TheLab.SampleHtmlEditor.FancyBlockDesigner" 型のインスタンスが必要であることを GetScriptDescriptors で定義したことを示しています。このコードは、次のような JavaScript コンストラクターを探します。

function SitefinityWebApp.Esd.TheLab.SampleHtmlEditor.FancyBlockDesigner(element) {

}

ほとんどの場合、次のようなプロトタイプも定義されています。

SitefinityWebApp.Esd.TheLab.SampleHtmlEditor.FancyBlockDesigner.prototype = {

}

現在、投稿したエラーには次のように記載されているため、「未定義またはnull参照のプロパティ 'FancyBlockDesigner'を取得できません」、おそらく次のいずれかが問題です:

  • 上記で説明したクラス (コンストラクター + プロトタイプ) を含む JavaScript ファイルが含まれていません。
  • 「FancyBlockDesigner」をコンストラクターに追加するのを忘れました (おそらく MS Ajax 名前空間を介して、他のオブジェクトがあるようです - 「SitefinityWebApp.Esd.TheLab」
  • 「SampleHtmlEditor」名前空間が登録されていません。JS ファイルの先頭に次の行があることを確認してください。Type.registerNamespace("SitefinityWebApp.Esd.TheLab.SampleHtmlEditor");

要するに、「SitefinityWebApp.Esd.TheLab.SampleHtmlEditor.FancyBlockDesigner」という名前の関数が見つかりません。

これが役に立てば幸いです、イヴァン

于 2012-09-29T10:46:30.773 に答える