首先让我先说一下这个问题,说我对Javascript很新。
我也理解Javascript对象是通过引用传递的,而原语是通过值[source]传递的。
那就是说,这是我的问题(简化示例):我正在提取包含大量不同信息的JSON数据,我需要将每种不同类型的信息放入另一个<ul>
中<ul>
1}}像这样:
<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
中添加addCars
语句,则可以看到添加到container
的数据}参数。
我很困惑,因为根据我从上面提供的资料中理解的内容:
...如果您更改参数本身......这不会影响该项目 被送入参数的。但是如果你改变了内部 参数,将传播回来......
我想我会appendTo
改变jQuery对象的内部结构。这是什么交易?
答案 0 :(得分:1)
看起来你正试图调用私有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();
编辑:有关正常工作的代码,请参阅此jsFiddle:http://jsfiddle.net/eHrH6/