【发布时间】:2015-01-06 15:58:39
【问题描述】:
我有以下 Grails (2.3.6) POGO:
class Pet {
Long id
String name
PetType type
}
还有以下控制器:
class PetController {
def index() {
List<Pet> pets = PetLoader.loadAllPets()
render(
view: "listPets",
model: [
pets: pets
]
)
}
def loadPet() {
Long petId = params.petId // Pet#id
// Do stuff with the 'petId'.
}
)
并在各自listPets.gsp的正文中:
<body>
<h1>Select a pet to edit below:</h1>
<g:select id="pets"
name="pets"
from="${pets}"
value="${pet.name}"
optionKey="id" />
<g:javascript>
var ajaxAction = "${createLink(controller:'pet',action:'loadPet')}"
$("#pets").on('change', function() {
$.get(
url: ajaxAction,
data: $("#pets").val(),
success: function(data, status) {
alert("Success!\n" + data);
},
dataType: "json"
);
});
</g:javascript>
</body>
当我运行这段代码时,我得到一个空的<g:select>,显然没有正确注入/配置。我想做的是这样的:
- 当页面加载时,整个
users列表被注入<select id="pets">下拉列表并显示Pet#name字符串作为选项文本;那么 - 当用户从下拉列表中(在 UI 中)选择一个新的
Pet时,jQuery 处理程序会触发对loadPet的异步调用;那么 - 在
loadPet内部,我需要通过params对象访问下拉列表中所选值的Pet#id,以便我可以在后端使用该宠物ID 做其他事情
我很难从这里的树林中看到森林。我确定我搞砸了<g:select> 标签。但我可能还需要更改控制器和/或 jQuery 脚本。所以我问:我需要对我的代码进行哪些更改,以便用Pet#name 填充选择,但是,当从jQuery 调用loadPets 时,我可以从params 访问Pet#id?
【问题讨论】: