从 select rails 上另一个模型的现有记录填充新表单上的文本字段
Populate textfields on new form from another model's existing records on select rails
我有一个 DefaultTemplate
模型,其中包含现有记录。我有另一个 Template
模型,我有一个 collection_select 和 DefaultTemplate
的记录。
我想要做的是,只要用户选择其中一个选项,其相关数据(例如内容和类型)就应该自动填充到新模板表单的 text_fields 中,以便它们可以保存。
我已经研究并发现我可以通过 JQuery 和 Ajax 调用来做到这一点,但是我不知道从哪里开始?我提到了 Auto populate text_fields based on selected item from another collection_select in Rails 3 并且它回答了我想要的,但是这个人自己发现代码很糟糕。我将不胜感激任何帮助。谢谢
public JsonResult FillTask(int projectID)
{
List<tbltask> task = new List<tbltask>();
task = te.getTasks(projectID);
model.Tasks = task;
model.task = task.Select(x => new SelectListItem
{
Value = x.TaskId.ToString(),
Text = x.TaskName
}).ToList();
//var tasks = model.Tasks.Where(c => c.ProjectId == project);
return Json(model, JsonRequestBehavior.AllowGet);
}
<script type="text/javascript">
$(document).ready(function () {
$("#tblprojects").change(function()
{
var projectID = $('#tblprojects').val();
if(projectID>0){
FillTask(projectID)
}
});
});
function FillTask(projectID) {
$.ajax({
url: '@Url.Action("FillTask", "TimeEntry")',
type: "GET",
dataType: "JSON",
data: { 'projectID': projectID},
success: function (data) {
$(data.task).each(function()
{
//this refers to the current item being iterated over
var option = $('<option />');
option.attr('value', this.Value).text(this.Text);
$('#task').append(option);
});
}
});
}
</script>
只有当我单击该项目的项目任务详细信息时,我才有与该项目相关的绑定任务加载到另一个下拉菜单中,它使用 ajax 和 jquery 调用级联下拉菜单!!杰森方法也
已解决!!
ok,摸索了2天,发现答案很简单。只是我什至不敢尝试 ajax ,所以我从来没有真正关注过它。以防万一有人在寻找同样的东西,这是对我有用的解决方案。
application.js 文件
$(function($) {
$("#email_template_id").change(function() {
var selected_id = $("#email_template_id").val()
if (selected_id == '')
{
$('#email_template_email_subject').val('')
}
else {
$.ajax({
type: "GET",
url: "/default_email_templates/" + selected_id + ".json",
dataType: 'json',
success: function(data){
$('#email_template_email_subject').val(data.email_subject)
}
});
}
});
});
View(在 EmailTemplate 的 _form.html.erb
中,其中 DefaultEmailTemplate 是模型,其值应该出现在选择中)
<%= form_for(@email_template) do |f| %>
<div class="field">
<%= f.label :default_email_template_id, "Template Type" %>
<%= f.collection_select(:id, DefaultEmailTemplate.all, :id, :email_type, {prompt: "Select one"}, {:data => {remote: true}}) %>
</div>
<div class="field">
<%= f.label :email_subject %>
<%= f.text_field :email_subject %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
我们可以通过简单地一个接一个地传递参数来减少 ajax 代码,但是,我不是很清楚这一点,并且还没有真正尝试过。请 post 关于代码的任何建议。谢谢。
P.S:也许我看的不对,但当我看的时候,这些对我帮助很大
How to do an Ajax GET request to get data from rails and pass it to javascript(google maps)?
passing text_field values in ajx on rails
我有一个 DefaultTemplate
模型,其中包含现有记录。我有另一个 Template
模型,我有一个 collection_select 和 DefaultTemplate
的记录。
我想要做的是,只要用户选择其中一个选项,其相关数据(例如内容和类型)就应该自动填充到新模板表单的 text_fields 中,以便它们可以保存。
我已经研究并发现我可以通过 JQuery 和 Ajax 调用来做到这一点,但是我不知道从哪里开始?我提到了 Auto populate text_fields based on selected item from another collection_select in Rails 3 并且它回答了我想要的,但是这个人自己发现代码很糟糕。我将不胜感激任何帮助。谢谢
public JsonResult FillTask(int projectID)
{
List<tbltask> task = new List<tbltask>();
task = te.getTasks(projectID);
model.Tasks = task;
model.task = task.Select(x => new SelectListItem
{
Value = x.TaskId.ToString(),
Text = x.TaskName
}).ToList();
//var tasks = model.Tasks.Where(c => c.ProjectId == project);
return Json(model, JsonRequestBehavior.AllowGet);
}
<script type="text/javascript">
$(document).ready(function () {
$("#tblprojects").change(function()
{
var projectID = $('#tblprojects').val();
if(projectID>0){
FillTask(projectID)
}
});
});
function FillTask(projectID) {
$.ajax({
url: '@Url.Action("FillTask", "TimeEntry")',
type: "GET",
dataType: "JSON",
data: { 'projectID': projectID},
success: function (data) {
$(data.task).each(function()
{
//this refers to the current item being iterated over
var option = $('<option />');
option.attr('value', this.Value).text(this.Text);
$('#task').append(option);
});
}
});
}
</script>
只有当我单击该项目的项目任务详细信息时,我才有与该项目相关的绑定任务加载到另一个下拉菜单中,它使用 ajax 和 jquery 调用级联下拉菜单!!杰森方法也
已解决!!
ok,摸索了2天,发现答案很简单。只是我什至不敢尝试 ajax ,所以我从来没有真正关注过它。以防万一有人在寻找同样的东西,这是对我有用的解决方案。
application.js 文件
$(function($) {
$("#email_template_id").change(function() {
var selected_id = $("#email_template_id").val()
if (selected_id == '')
{
$('#email_template_email_subject').val('')
}
else {
$.ajax({
type: "GET",
url: "/default_email_templates/" + selected_id + ".json",
dataType: 'json',
success: function(data){
$('#email_template_email_subject').val(data.email_subject)
}
});
}
});
});
View(在 EmailTemplate 的 _form.html.erb
中,其中 DefaultEmailTemplate 是模型,其值应该出现在选择中)
<%= form_for(@email_template) do |f| %>
<div class="field">
<%= f.label :default_email_template_id, "Template Type" %>
<%= f.collection_select(:id, DefaultEmailTemplate.all, :id, :email_type, {prompt: "Select one"}, {:data => {remote: true}}) %>
</div>
<div class="field">
<%= f.label :email_subject %>
<%= f.text_field :email_subject %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
我们可以通过简单地一个接一个地传递参数来减少 ajax 代码,但是,我不是很清楚这一点,并且还没有真正尝试过。请 post 关于代码的任何建议。谢谢。
P.S:也许我看的不对,但当我看的时候,这些对我帮助很大
How to do an Ajax GET request to get data from rails and pass it to javascript(google maps)?
passing text_field values in ajx on rails