0

我正在使用 scriptaculous 库。但是,我在为原型库包含 JSON 库时遇到了一些问题。它自动向所有对象添加了 toJSONSTring 和 parseJSONSTRING 方法,坦率地说,这在某些地方造成了严重破坏。就像我似乎无法使用 Ajax Updater 函数,我怀疑它是因为这个 toJSONSTring 方法已附加到我传递给它的选项对象。

无论如何要取消设置或至少以某种方式删除已添加到对象中的功能。

编辑:::

实际上,我正在尝试发出 ajax 请求,但在

Ajax.Updater = Class.create(Ajax.Request,....

原型库的一部分。在它应该执行和发布 AJAX 请求的部分它不会 - 特别是在:

$super(url, options);

准确地说,我在这个 url 使用这个可排序和可编辑的表格网格:http: //cloud.millstream.com.au/millstream.com.au/upload/code/tablekit/index.html

基本上,您可以在表格单元格上单击以对其进行编辑,然后按 OK 按钮进行确认。单击按钮后,将发出 ajax 请求。

表的可编辑特性在提交函数中调用 Ajax 更新程序,如下所示:

submit : function(cell, form) {
        var op = this.options;
        form = form ? form : cell.down('form');
        var head = $(TableKit.getHeaderCells(null, cell)[TableKit.getCellIndex(cell)]);
        var row = cell.up('tr');
        var table = cell.up('table');
        var ss = '&row=' + (TableKit.getRowIndex(row)+1) + '&cell=' + (TableKit.getCellIndex(cell)+1) + '&id=' + row.id + '&field=' + head.id + '&' + Form.serialize(form);


        this.ajax = new Ajax.Updater(cell, op.ajaxURI || TableKit.option('editAjaxURI', table.id)[0], Object.extend(op.ajaxOptions || TableKit.option('editAjaxOptions', table.id)[0], {
            postBody : ss,
            onComplete : function() {
                var data = TableKit.getCellData(cell);
                data.active = false;
                data.refresh = true; // mark cell cache for refreshing, in case cell contents has changed and sorting is applied
            }
        }));
    },

问题是从未提出请求,我一直按 OK 按钮无济于事。

编辑::::::::::::::::

我仍然被难住了——我什至尝试过自己调用 Ajax.Updater 函数,但它根本不起作用。好像这个功能一下子就被官方渲染为无用了。我已经进行了您所说的更改,但都无济于事:(坦率地说,我在这里没有选择余地-另一个想法是放弃此 tablekit 并寻找具有类似功能的其他东西,希望这可能会起作用!

4

3 回答 3

2

听起来这些方法正在被添加到 Object 的原型中。通过添加到 Object 的原型,该库会自动为从 Object 派生的所有内容(换句话说,所有内容)提供这些方法。您可能想阅读 Javascript 中的原型继承,以便更好地处理这个问题。

无论如何,您可以通过以下方式删除这些方法:

delete Object.prototype.toJSONString;
delete Object.prototype.parseJSONString;
于 2009-10-27T15:24:35.757 回答
1

您可以使用“删除”从对象中删除任何内容:

a.toJSON = function () {};
delete a.toJSON;
a.toJSON() => error: toJSON is not a function
a.toJSON => undefined

但是我不认为正在发生的事情是因为您认为正在发生的事情:) 也许可以提供有关 Ajax.Updater 问题的更多详细信息?


看过编辑。好的,您能否也发布调用 Ajax.Updater 的实际代码行,同样重要的是,详细解释您提供给它的选项对象是如何制作的?

另外,请确保您正在执行以下操作:

new Ajax.Updater(stuff)

而不仅仅是:

Ajax.Updater(stuff)

您需要创建一个新的 Updater 对象并使用“new”(很可能您已经这样做了,只是要确保)。


好的,我仍然不确定传递给 ajax.Updater 的是什么,因为您扩展了我看不到的东西,但试试这个:从变量“ ss ”的开头删除“& ”;在选项对象中使用参数: ss而不是postBody: ss

于 2009-10-27T15:19:01.303 回答
0
delete obj.property

在这种情况下:

delete obj.toJSONSTring;
delete obj.parseJSONSTRING;
于 2009-10-27T15:15:04.870 回答