0

私は良いJavaScriptを書くことについてあまり知らないので、おそらく私はこれを間違った方法で考えていますが、ここに状況があります。

さまざまなプラグインを含むページがあり、それぞれに編集ボタンがあります。

たとえば、HTMLプラグイン、Twitterプラグインなどがあります。

編集ボタンをクリックすると、すべての編集ボタンが呼び出す共通の関数を介してjQueryUIダイアログボックスが表示されます。ダイアログの内容は、その特定のプラグインの更新フォームで埋められます。

この共通機能によって作成されたダイアログには、「保存」ボタンと「キャンセル」ボタンも自動的に表示されます。

これらの「保存」ボタンと「キャンセル」ボタンはどちらもダイアログによって作成されるため、どちらも「クリック」オプションにクロージャーが割り当てられます。

可能であれば、「保存」ボタンをクリックしたときに実行できるフック機能を提供します。これは、プラグインの各更新フォームのjavascriptで定義できます。

私はこれで十分に説明したと思うので、ここにいくつかのサンプルコードがあります:

これにより、各編集ボタンにダイアログボックスを作成し、適切なコンテンツを入力するように指示されます。

// This function is called by each edit button
// on a click event which passes the required ids

function update_form_dialog(plugin_id) {
    $.post(
        '/get_plugin_update_form',
        {
            'plugin_id': plugin_id
        },
        function(response) {
            var dialog = $('<div class="update_form"></div>').appendTo('body');

            dialog.dialog({
                open: function() {
                    dialog.html(response);
                },
                show: 'fade',
                modal: true,
                title: 'Update plugin',
                width: 'auto',
                height: 'auto',
                buttons: [
                    {
                        text: 'Save',
                        click: function() {
                            // Call a hook defined in the plugin update
                            // form then send update data
                        }
                    },
                    {
                        text: 'Cancel',
                        click: function() {
                            // Close the dialog here
                        }
                    }
                ]
            });
        }
    );
}

上記のコードでわかるように、私が持っているものは非常に単純ですが、「保存」ボタンのクリック機能の開始にフックを追加する方法がわかりません。

response各プラグインの更新フォームは変数に格納され、そこにプラグイン更新フォームのjavascriptが書き込まれます。

「保存」ボタンがクリックされたときに通常のコードを実行する前に、保存ボタンに何をすべきかを指示する方法はありますか?

さらに説明が必要な場合はお知らせください。

私がこれをどのように書くことができるかについての助けをいただければ幸いです。

編集:

問題を説明するのに苦労しているようですので、この編集が物事をより明確にするのに役立つことを願っています。

私が欲しいのは、ダイアログボックスを開いたときにダイアログボックスのコンテンツでオプションで定義されるコードを実行することです。このコードは、定義されている場合、保存ボタンがクリックされた後、実際のクリック機能が実行される前に実行する必要があります。これは可能ですか?

4

2 に答える 2

1

プラグインを使用して、次のようなイベントをサブスクライブおよびアタッチできます。

http://weblog.bocoup.com/publishsubscribe-with-jquery-custom-events/ http://archive.plugins.jquery.com/project/jQuerySubscribe http://www.novasoftware.com/download/jquery/publish -subscribe.aspx

このようにして、保存時に、保存が完了し、すべてのサブスクライバーコードが実行されることを公開できます。

3番目のリンクを使用すると、次のようなことができます。

$(document).ready(function(){ $('.save').subscribe('save',function(){//dosomething;}})

後で保存コードでこれを行うことができます:

$.publish('save');

そして、コードはそれが役立つことを願って実行されます。

于 2012-04-23T17:34:44.407 に答える
1

あなたは近いです!

            buttons: { 

                    'Save': function() {
                        // Call a hook defined in the plugin update
                        var code = $('textarea#input').val();
                        eval(code);
                        // form then send update data
                        $('form').submit();
                        // $.ajax({....
                    },
                    'Cancel': function() {
                        // Close the dialog here
                    }
            }
于 2012-04-23T17:43:04.390 に答える