2

私は、この優れた javascript ライブラリを変更して、html 入力をオートコンプリートする作業を行っています。ここを参照してください。実際には、このライブラリのデフォルトの動作を管理できるように、非破壊的なものを探しています。これは、「追加パラメーターなし」も処理できます。

だから私は次のような電話があると思います

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

myExtra の null テストを使用して、null の場合は何もしないか、myExtra のコンテンツを Ajax リクエストに「追加」するため、この部分は次のようになります。

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

myExtra が null または空の文字列ではない場合のようになります。

  new Ajax.Request(this.serviceUrl, {
    parameters: { query: this.currentValue , b: 'b', c: 'c'},
    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'

これを理解するための指針があれば、よろしくお願いします。

4

2 に答える 2

2

@Matt がコメントで既に述べたように、この中括弧のペアはオブジェクト リテラルであり、オブジェクトを作成します。と同じです

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

しかし、はるかに簡潔で、オブジェクトを作成する好ましい方法です。

あなたがやりたいことは、あるオブジェクトから別のオブジェクトにプロパティをコピーすることだと思います。for...in [MDN]ループを使用して、1 つのオブジェクトのすべてのプロパティを反復処理することで、これを行うことができます。

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];
    }
}

オブジェクトの詳細については、MDN JavaScript ガイド-オブジェクトの操作 を参照してください。

于 2011-10-19T08:32:05.950 に答える
1

jQueryを使用できる場合は、extendメソッドを使用できます。あなたの例を取るためにあなたは次のようなものを持っているでしょう:

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

そして、あなたの方法であなたはすることができます:

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

次に、からの値を使用しますfinalExtras

于 2011-10-19T08:30:38.973 に答える