7

私は次のコードを持っています:

var modal = {
    content: '',
    form: '',
    $form: '',
    $message: '',
    $modal: '',
    $submits: '',
    href: ''
}

$.modal = function (options) {
    var settings = $.extend({}, $.modal.defaults, options),
        root = getModalDiv(),
    function getModalDiv() {
        var modal = $('#modal');
        return modal;
    };
})(jQuery);

modal.$modal = $.modal({
    title: link.title,
    closeButton: true,
    content: modal.content,
    onClose: onModalClose,
    minWidth: 315,
    maxHeight: false,
    width: false,
    resizeOnLoad: true
});
modal.$form = modal.$modal.find('.form');

.findを指して次のように言ってエラーが発生します:

プロパティfindは、タイプ'string'の変数に存在しません。エラーの内容は理解できます$modalが、使用できる変数として定義するにはどうすればよい.findですか?

また、今私はタイプスクリプトの世界にいます。ここでモーダルをvarとして定義するよりも、モーダルを定義するためのより良い方法はありますか?

4

1 に答える 1

6

あなたのコードが行っている関数の割り当ては$.modal不完全だと思いますが、タイプの定義について具体的に尋ねているので、とにかく答えてみます。

そのため、まだ行っていない場合はまず、codeplexから jquery.d.tsを取得し、以下のようにコードで参照します。ライブラリを操作するときに非常に役立つ jQuery の型宣言を提供します。また、jQuery オブジェクトであるはずのメンバーを定義することもできます。

///<reference path="jquery.d.ts" />

例として、IModalどれが 4 つの jQuery メンバーを持つインターフェースであるかを見てみましょう (他のメンバーで使用したいタイプをいくつか推測しましたが、それらはあなたが望むものではないかもしれません):

interface IModal {
    content : string;
    form    : HTMLFormElement;
    $form   : JQuery;
    $message: JQuery;
    $modal  : JQuery;
    $submits: JQuery;
    href    : string;
}

2 番目のインターフェイス宣言 は、jquery.d.ts ファイルに実装されているためJQueryStatic、オブジェクトでアクセスできる別の静的メンバーを宣言するだけです$(脚注を参照) 。$JQueryStatic

interface JQueryStatic {
    modal : any;
};

IModalこれで、実装するインターフェイスによって提供される明示的な型情報を使用して、モーダル オブジェクトを作成できるようになりました。

var modal : IModal = {
    content : '',
    form    : null,
    $form   : null,
    $message: null,
    $modal  : null,
    $submits: null,
    href    : ''
}

JQueryStaticそして、アドオンのアカウントで $.modal に関数を割り当てることができます:

$.modal = function (options) {
    var settings = $.extend({}, $.modal.defaults, options),
        root = getModalDiv(),
        getModalDiv = function() {
            var modal = $('#modal');
            return modal;
        };

    ...
})(jQuery);

それを適切に配置して、その割り当てを修正すると、次の行は問題ありません。

modal.$form = modal.$modal.find('.form');

注: 既存のインターフェイスにメンバーを追加した私の経験は、せいぜい不安定でした。多くの場合、コンパイラは何らかの理由でメンバーを取得しません。これは、コード ベースが大きくなるにつれて発生する可能性が高くなるため、正確な原因を特定するのが難しくなります。注目すべきことだけです。

于 2012-10-31T07:51:25.423 に答える