2011-10-19 6 views
2

私はAjax呼び出しにいくつかの余分なパラメータを渡す必要があるので、この優れたjavascriptライブラリを自動入力用のHTML入力see hereに変更しています。実際に私は非破壊的な何かを探していますので、このライブラリのデフォルトの動作を管理することができ、 "余分なパラメータなし"も処理できます。Javascript、中かっこと定義を追加する

ので、私はこの部分ように私は、AjaxリクエストにmyExtraの内容を「追加」nullの場合、または何もしないmyExtraの場合はnullのテストと

myExtra = {b : 'b', c: 'c'} 
// or maybe a thing like myExtra = "{b : 'b', c: 'c'}" 
myAutoComplete = new Autocomplete('query', { serviceUrl:'autoComplete.rails'}, myExtra); 

のようなコールを持っているだろうと思い:

私はと

new Ajax.Request(this.serviceUrl, { 
    parameters: { query: this.currentValue , b: 'b', c: 'c'}, 
    onComplete: this.processResponse.bind(this), 
    method: 'get' 
    }); 

:myExtraがnullまたは空の文字列でないときのようなものになる

new Ajax.Request(this.serviceUrl, { 
    parameters: { query: this.currentValue , }, 
    onComplete: this.processResponse.bind(this), 
    method: 'get' 
    }); 

私の問題は、別のものに中括弧付きのコンテンツ{}を追加する方法がわからないことです(これらの{}が何であるかわかりません...)

私はPythonが受け入れるもののこの王をしたいと思うが、私はちょうどJavascriptがそれを行うことができますかわからない、

>>> class A: 
def __init__(self, data): 
    self.data = data 
>>> a = A("my data") 
>>> dir(a) 
['__doc__', '__init__', '__module__', 'data'] 
>>> myExtra = "b='b';c='c'" 
>>> for x in myExtra.split(";"): 
    var, value = x.split('=') 
     setattr(a, var, value) 

>>> dir(a) 
['__doc__', '__init__', '__module__', 'b', 'c', 'data'] 
>>> print a.data, a.b, a.c 
my data 'b' 'c' 

ので、あなたがこれを理解するための任意のポインタを持っている場合は、事前にありがとうございください。

+1

中括弧は、** [Object Literals](http://www.dyn-web.com/tutorials/obj_lit.php)を使用して 'Object'を定義します** – Matt

答えて

2

@Mattは既に彼のコメントで言ったように、この中かっこのペアはオブジェクトリテラルであり、オブジェクトを作成します。

var myExtra = new Object(); 
myExtra.b = 'b'; 
myExtra.c = 'c'; 

と同じですが、はるかに簡潔でオブジェクトを作成するための好ましい方法です。

あなたがしたいことは、あるオブジェクトから別のオブジェクトにプロパティをコピーすることだと思います。 Working with ObjectsからMDN JavaScript Guideを見て、オブジェクトの詳細については

var a = {query: this.currentValue}; 
var b = {b : 'b', c: 'c'}; 

for(var prop in b) { 
    if(b.hasOwnProperty(prop) { // safe guard (might not be necessary) 
     a[prop] = b[prop]; 
    } 
} 

:あなたはfor...in[MDN]ループを使用して、1つのオブジェクトのすべてのプロパティを反復処理することによってこれを行うことができます。

1

jQueryを使用できる場合はextendメソッドを使用できます。あなたの例を取るために、あなたのようなものだろう:

var myDefaultExtras = { b: 'b', c: 'c' };

をそしてあなたの方法であなたが行うことができます。

var finalExtras = $.extend({}, myDefaultExtras, extras);

あなたはその後、finalExtrasからの値を使用します。

+0

タスクを実行するためのjQueryライブラリ全体を含みます。シンプルな 'for'ループは悲鳴を私に過度にすることができます。 – Matt

+0

まだjQueryを使用していない場合はyesを選択します。しかし、それは誰かがjQueryを見て、拡張のためのコードを取るのを止めるものではありません。 – Steve

関連する問題