2012-01-12 11 views
0

まず、私はJavascriptをかなり新しくしていると言って、この質問の序文を述べます。jQuery DOMオブジェクトと参照渡し

また、Javascriptオブジェクトは参照渡しであり、プリミティブは値[source]で渡されることも理解しています。私は別の多くの情報が含まれているJSONデータに引っ張っていると私は、このような別の<ul>にあります<ul>への情報のそれぞれ異なるタイプを配置する必要があります:言っ

は、ここに私の質問(簡単な例)です

私は上記のリスト用のテンプレートをつかんだ
<ul class="car-tree"> 
    <li> 
    <label>Sports Cars</label> 
    <ul class="sport-cars"> 
     <li>Porsche</li> 
     <li>Mercedes</li> 
     <li>BMW</li> 
    </ul> 
    </li> 
    <li> 
    <label>Super Cars</label> 
    <ul class="super-cars"> 
     <li>Ferrari</li> 
     <li>Lamborghini</li> 
    </ul> 
    </li> 
    <li> 
    <!-- and so on... --> 
    </li> 
</ul> 

は、最も内側の<li>タグ以外のすべてを含んでいると私はこのようにそれを埋めるためにしようとしている:あなたがこれを行うと、あなたが得る

var CarView = function(){ 

    var buildCarTree = function(){ 

    // Gets the JSON data from somewhere 
    var jsonData = grabJsonData(); 

    // Grab the template and convert it into a jQuery object 
    var template = $(grabCarTreeTemplate()); 

    // Adds sport car data to sports cars list 
    this.addCars(template.find('.sports-cars'), jsonData.sportsCars); 

    // Adds super car data to sports cars list 
    this.addCars(template.find('.super-cars'), jsonData.superCars); 

    // Add the car tree to some container 
    $('#container-trees').append(template); 
    } 

    var addCars = function(container, carData){ 

    for(id in carData){ 
     $('<li/>', { 
     text : carData[id].text 
     }).appendTo(container); 
    } 
    } 
}; 

var view = new CarView(); 
view.buildCarTree(); 

データが追加されていないテンプレートがありますが、を通してconsole.logステートメントを追加すると、container引数に追加されているデータを見ることができます。

私はので、私は、私は上記のソースから理解して何から困惑している

を...あなたは、パラメータ自体を変更した場合...に供給されたアイテム には影響しませんパラメータ。あなたは

バックアップ伝播する パラメータの内部を、...変更した場合でも、私はappendToはjQueryオブジェクトの内部を変更するだろうと考え出しただろう。どうしたんだ?

+0

はgrabJsonData'は、AJAX要求を行う 'ですか?その場合は、非同期の問題があります。 'grabJsonData'の内容を投稿して、修正方法を教えてください。 – glortho

+0

これは問題ではありません。 addCars内でリストが正しく変更されているのがわかるのでJSONの部分は重要ではありませんが、その関数を残すとリストにはその変更が反映されません。 – Steve

答えて

1

private var関数をobjのメソッドと同じように呼び出そうとしているようです。これに変更して試してみてください。

var CarView = function(){ 

    this.buildCarTree = function(){ 

    // Gets the JSON data from somewhere 
    var jsonData = grabJsonData(); 

    // Grab the template and convert it into a jQuery object 
    var template = $(grabCarTreeTemplate()); 

    // Adds sport car data to sports cars list 
    this.addCars(template.find('.sports-cars'), jsonData.sportsCars); 

    // Adds super car data to sports cars list 
    this.addCars(template.find('.super-cars'), jsonData.superCars); 

    // Add the car tree to some container 
    $('#container-trees').append(template); 
    } 

    this.addCars = function(container, carData){ 

    for(id in carData){ 
     $('<li/>', { 
     text : carData[id].text 
     }).appendTo(container); 
    } 
    } 
}; 

var view = new CarView(); 
view.buildCarTree(); 

EDIT:コードを操作するため、このjsFiddleを参照してください:http://jsfiddle.net/eHrH6/

+0

あなたは正しいです!今私はそれを見落とすために愚かな気がする...男の子私はペアプログラミングを欠場するのですか? – Steve

関連する問題