1

ウィジェット ファクトリを使用して、「Picklist」という jQueryUI ウィジェットを作成しました。それはうまくいきます。ただし、ウィジェットなのでval()メソッドには反応しません。

配列をループしてデータを Web コントロールに割り当てる関数があります。ほとんどの場合、jQuery メソッド val() を使用して値を割り当てることができます。しかし、それは私のウィジェットでは機能しません。

代わりに、コントロールにウィジェットが存在するかどうかを手動で確認し、ウィジェット バージョンの val() を呼び出して割り当てを行う必要があります。これは非常に非効率的であり、優れたオブジェクト指向設計とは対照的です。

    for (var i = 0; i < ControlData.length; i++)
    {
        var mapping = ControlData[i];
        $('#' + mapping.controlName).val(mapping.value);
        if ($('#' + mapping.controlName).data('Erik-Picklist'))
        {
            $('#' + mapping.controlName).Picklist("option", { val: mapping.value });
        }
    }

val() を特定の要素のウィジェット メソッドにマップする方法はありますか? val() メソッドを Picklist の val() メソッドにマップする要素で呼び出すことができるメソッドがあるのではないかと考えていましたが、そのような例は見たことがありません。

4

1 に答える 1

1

誰も応答しなかったので (金曜日の夜に質問を投稿するように教えてくれます)、これを行う方法を見つけるのに多くの時間を費やしました。私が思いつくことができる最善の解決策は、https://stackoverflow.com/a/5760684/594602に触発されました

基本的に、既存の val() 関数をオーバーライドして、現在の要素のオーバーライドをチェックします。

$.fn.old_val = $.fn.val;
$.fn.val = function ()
{
    var ErikVal = this.data('ErikVal');
    if (ErikVal)
    {
        return ErikVal.apply(this, arguments);
    }
    else
    {
        return this.old_val.apply(this, arguments);
    }
};

jQueryUI ウィジェットの _create() で、次を追加しました。

_create: function ()
{
    ...
    this.element.data('ErikVal', function ()
    {
        this.Picklist("option", { val: arguments[0] });
    });
},

私はこれを特に誇りに思っているわけではありませんが、うまくいっています。

于 2013-06-12T23:33:41.893 に答える