0

我对编写好的 javascript 知之甚少,所以也许我以错误的方式思考这个问题,但情况就是这样。

我有一个包含各种插件的页面,每个插件都有一个编辑按钮。

例如,有一个 HTML 插件、一个 Twitter 插件等。

单击编辑按钮后,将通过所有编辑按钮调用的通用函数显示 jQuery UI 对话框。对话框的内容由特定插件的更新表单填充。

此常用功能创建的对话框还自动提供“保存”和“取消”按钮。

由于这两个“保存”和“取消”按钮都是由对话框创建的,因此它们都被分配给“单击”选项的闭包。

如果可能的话,我想做的是提供某种钩子函数,可以在单击“保存”按钮时运行,它可以由每个插件更新表单中的 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

你很近!

            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 回答
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

这样,在保存时,您可以发布保存已完成并且将执行所有订阅者代码。

使用第三个链接,您可以执行以下操作:

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

稍后在保存代码上,您可以这样做:

$.publish('save');

代码将被执行,希望对您有所帮助。

于 2012-04-23T17:34:44.407 回答