2014-03-12 72 views
2

我有像这样的格式一些JSON:选择嵌套的JSON对象和填充下拉菜单

"games": [{ 
    "gameType": "RPG", 
    "publishers": [{ 
     "publisher": "Square", 
     "titles": [{ 
      "title": "Final Fantasy", 
      "gameReleases": [ 2006, 2008, 2010, 2012, 2013, 2014 ] 
     }] 
    }] 
}] 

我有一个下拉,允许用户选择游戏类型,将填充另一个下拉菜单。 因此,如果用户从下拉列表中选择RPG,发布者下拉菜单中将显示“Square”,当用户选择Square时,标题下拉菜单将显示“最终幻想”,当选择最终幻想时,日期范围将会可以在相关的下拉菜单中选择。

目前我的游戏类型下拉加载正常,问题是填充随后的下拉菜单。这是我的代码来填充第一个下拉:

profileSelected: function() { 
    var myUrl = "webapp/jsonaccount=" + accountcode; 
    $.ajax({ 
     url: myUrl, 
     type: "POST", 
     dataType: "text", 
     success: function(data) { 
      var info = JSON.parse(data); //parse the returned data 
      var getType = _.pluck(info.games, 'gameType'); //select the game types from the JSON 
      var prepareType = _.map(getType, function(val){ return '<option>'+val + '</option>';}).join(); //create the to be added to the combobox 

      $('select#gameTypeCombo').html(prepareType).selectpicker('render'); //render the box 
      $('select#gameTypeCombo').selectpicker('refresh'); //refresh the box 
      $('select#gameTypeCombo').on('change', function() { //when gameType is chosen do this 
       //Populate publisher based on GameType: (select#publisher) 
       // When publisher is selected populate Titles: (select#gameTypeCombo) 
       // When titles is selected populate gameReleases: (select#releaseDates) 
      }) 
     } 
    }) 
} 

我的修订是将它添加到更改功能来填充发布者(就没有得到如标题,因为这没有工作,开始与) :

$('select#gameTypeCombo').on('change', function() { 
    var getPublisher = _.pluck(info.games.gameType, 'publisher'); 
    var preparePublisher = _.map(getPublisher, function(val){ return '<option>' + val + '</option>';}).join(); 
    $('select#publisher').html (preparePublisher).selectpicker('render');       
}) 

我首先想到的是,这是由于这一事实,这是我的AJAX请求中 - 这可能是不理想的,但它是通过传递JSON。 但是,当我再次通过游戏类型时,它工作。

所以我认为我的问题是,发布者依赖于标题,而我的代码不知道要返回哪个发布者。我看着变量,但没有工作,不知道从哪里去。

任何意见表示赞赏。

- 编辑 -

我加入[0]我真正得到返回的数据,是有道理的改变

var getPublisher = _.pluck(info.games[0].gameType, 'publisher'); 

所以,但是开始这很难在编码,我希望它是根据变化在前面的下拉菜单中。

+0

没有人能够提供建议吗? – Hagbard

+0

将JSON数据传递给map的迭代器函数。这样,你的内在功能可以处理选择。我会尽量在一段时间内写出正式的答案。 – varagrawal

回答

2

我已经设法解决您的查询。

这是所有嵌套.change()函数调用适当填充数据后的一堆。如果您需要帮助了解帮助功能,我会添加评论。 :)

你可以到这里看看:JSFiddle

借口穷人格式。您可以将JS复制到您最喜欢的文本编辑器并验证正在执行的操作。希望能帮助到你。

+0

非常感谢! – Hagbard