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関数を呼び出しようとしましたが、それはまったく機能しません。このような機能は、突然、公式には役に立たなくなった。私はあなたが言った変更を加えましたが、まったく役に立ちません:(率直に言って私はここでオプションを使い果たしています-別のアイデアはこのテーブルキットを捨てて、それがうまくいくことを期待して同様の機能を持つ何かを探すことです!

4

3 に答える 3

2

これらのメソッドが Object のプロトタイプに追加されているようです。Object のプロトタイプに追加することにより、ライブラリは、Object から派生するすべて (つまりすべて) にそれらのメソッドも自動的に提供します。これをより適切に処理するために、Javascript でのプロトタイプの継承について読んでみるとよいでしょう。

とにかく、これを行うことでこれらのメソッドを削除できます:

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

「delete」を使用して、オブジェクトから何でも削除できます。

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" を使用する必要があります (ほとんどの場合、既に行っていることを確認してください)。


OK、私には見えないものを拡張しているので、ajax.Updater に何が渡されているのかまだわかりませんが、これを試してください:変数 " ss " の先頭から "&" を削除してください。options オブジェクトでは、 postBody: ssの代わりにparameters: ssを使用します。

于 2009-10-27T15:19:01.303 に答える
0
delete obj.property

この場合:

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