我正在开展一个每周都有重复活动的项目.因此,我以非传统方式使用多个DateTime字段.我正在做的是一个FormBuilder,它创建一个输出工作日选择的字段,并选择一个时间.我正在使用我在网上找到的12小时插件,因此有效:
class ActionView::Helpers::FormBuilder
def dow_time(dow,time,options={})
rval = select(dow, DateTime::DAYNAMES)
rval += time_select(time, {:minute_step => 15, :ignore_date => false, :twelve_hour => true})
end
end
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是工作日选择实际上没有默认的选定值.这在我的创建页面上工作正常,但在编辑页面上没有.dow是一个符号,它引用调用模型中的字段,其中星期几字符串是"星期一","星期二"等.如何使用dow将该值从调用模型中拉出.
self[dow]
Run Code Online (Sandbox Code Playgroud)
不起作用,因为这是一个不同的类.
有任何想法吗?有些不同?
在给定某个AJAX请求的情况下,我正试图以动态创建表单元素.
这是我的设置:
视图:
<%= link_to 'Next', check_unique_id_students_path, :remote => true %>
<div id="guardian_student_details"></div>
Run Code Online (Sandbox Code Playgroud)
控制器:
def check_unique_id
@student = Student.new
@this_form = ActionView::Helpers::FormBuilder.new(:student, @student, @template, {}, proc{})
end
Run Code Online (Sandbox Code Playgroud)
JS:
jQuery("#guardian_student_details").html("<%=escape_javascript(render :partial => "student_details", :locals => { :s => @this_form }) %>");
Run Code Online (Sandbox Code Playgroud)
部分:
<% puts s.text_field :first_name %>
<% puts s.field_helpers %>
Run Code Online (Sandbox Code Playgroud)
出于调试目的,我在部分的开头放置了以下行:
<% puts s.class.to_s %>
<% puts s.object.to_s %>
Run Code Online (Sandbox Code Playgroud)
打印出:
ActionView::Helpers::FormBuilder
Student
Run Code Online (Sandbox Code Playgroud)
这应该工作.但是rails会出现以下错误:
ActionView::Template::Error (undefined method `text_field' for nil:NilClass):
1: <% puts s.class.to_s %>
2: <p>
3: <%= s.text_field :first_name, …Run Code Online (Sandbox Code Playgroud) forms ruby-on-rails actionview formbuilder ruby-on-rails-3.1
我在使用Symfony2中的表单构建器时遇到了麻烦.确切地说,我需要输入字段是html数组,但我无法使用createFormBuilder-> add创建它.这是我尝试过的:
$attributesForm = $this->createFormBuilder()
->add('attribute[0]', 'text') ...
Run Code Online (Sandbox Code Playgroud)
依此类推,但我得到以下异常:
名称"attribute [0]"包含非法字符.名称应以字母,>数字或下划线开头,并且只包含字母,数字,数字,下划线("_"),连字符>(" - ")和冒号(":").
有没有好的解决方案,或者我必须手动创建字段?
提前致谢!
编辑:进一步澄清这一点......我希望生成这样的东西:
<div id="msoft_adminbundle_offertype">
<div>Name <input type="text" name="name"></div>
<div>...</div>
<div>Attribute 0 <input type="text" name="attribute[0]"></div>
<div>Attribute 1 <input type="text" name="attribute[1]"></div>
<div>Attribute 3 <input type="text" name="attribute[3]"></div>
<ul>
</ul>
<p>
<button type="submit">Edit</button>
</p>
Run Code Online (Sandbox Code Playgroud)
救命?
我试图使用symfony2表单生成器向选项元素添加自定义属性即时通讯我不确定本机是否可行.如果不是我需要知道如何添加功能.
以下面的形式为例:
class FooForm extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('user','choice',array(
'choices' => array(
'designers'=>'designers',
'1'=>'mike',
'2'=>'carroll',
'developers'=>'developers',
'3'=>'chase',
'4'=>'brett',
'5'=>'jordan',
)
));
}
}
Run Code Online (Sandbox Code Playgroud)
然后在渲染时我需要它看起来像:
<select>
<option value="" disabled="disabled">designers</option>
<option value="1">mike</option>
<option value="2">carroll</option>
<option value="" disabled="disabled">developers</option>
<option value="3">chase</option>
<option value="4">brett</option>
<option value="5">jordan</option>
</select>
Run Code Online (Sandbox Code Playgroud)
我所期待的将是这样的:
class FooForm extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('user','choice',array(
'choices' => array(
'designers'=>array(
'label'=>'designers',
'attr'=>arrry('disabled'=>'disabled')
),
'1'=>'mike',
'2'=>'carroll',
'developers'=>array(
'label'=>'developers',
'attr'=>arrry('disabled'=>'disabled')
),
'3'=>'chase',
'4'=>'brett',
'5'=>'jordan',
)
)); …Run Code Online (Sandbox Code Playgroud) 首先,我已经阅读了集合字段类型和如何嵌入表单集合的文档......示例是关于一个与另一个实体(标签)具有一对多关系的实体(任务),我理解它,但我不能适应我想要的!
为了简化,假设我有一个Task实体,这个任务实体与用户和项目等其他对象有一些关系(每个任务可以有一个用户和一个项目)
我想创建一个表单,在此表单中包含一个任务列表,每个任务在一行表中,显示task.title,task.startdate,task.user.name,task.user.company.name,task等信息. .project.name,它有2个字段可编辑,文本框"描述"和复选框"活动".您可以使用主窗体中表格底部的一个按钮编辑多个任务并提交表单,因此基本上您应该能够在一个事务中更新多个记录(而不是每行创建一个表单和一个提交按钮,因此每次提交一次记录更新).
这个复杂的设计我有很多问题:
首先,我想按照示例在主窗体中嵌入一组表单,所以我为我的Task创建了一个Form Type,它应该像每行一个表单一样.我做了这些文件:
任务的表单类型:
// src/Acme/TaskBundle/Form/Type/TaskType.php
namespace Acme\TaskBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class TaskType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('description', 'text', ['label' => false, 'required' => false, 'attr' => ['placeholder' => 'description']]);
$builder->add('active', 'checkbox', ['label' => false, 'required' => false, 'data' => true]);
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' …Run Code Online (Sandbox Code Playgroud) 我有一段时间的问题,我已经在这个主题上阅读了很多类似的问题,但在我的情况下无法实现答案.
我有一个用Ajax填充的select字段.所以在我的表单构建器中我有这个代码:
VilleType.php
/**
* @ORM\Entity(repositoryClass="MDB\AnnonceBundle\Entity\RegisterRepository")
*/
class VilleType extends AbstractType {
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('nomComplet', 'choice'
);
}
/**
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver) {
$resolver->setDefaults(array(
'data_class' => 'MDB\AdresseBundle\Entity\Ville'
));
}
/**
* @return string
*/
public function getName() {
return 'mdb_adressebundle_ville';
}
}
Run Code Online (Sandbox Code Playgroud)
但是我的形式永远不会被证实,因为它们在这个选择领域没有价值.但是我无法在内部添加值因为我事先不知道用户将作为值输入什么.
所以我的问题是如何禁用Symfony对此字段的验证.或者允许它接受所有价值.
谢谢
编辑
在这里,我尝试了一种新方法.我使用事件监听器来修改我的字段,其值大于用户提交的值.
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('nomComplet', 'choice');
$builder->get('nomComplet')->addEventListener( …Run Code Online (Sandbox Code Playgroud) 我有一个Angular 2 Form(formbuilder)的默认值的问题:我的默认值是observables(我从服务器检索),所以我不能像这样实现它们:
export class UserComponent implements OnInit{
userForm: ControlGroup;
userData: any; // Initialise the observable var
ngOnInit():any {
this.userData = this._dataService.getAllData() // My Observable
.subscribe(
data => {
this.userData = data;
}
);
this.userForm = this._formBuilder.group({
// below the default value
'username': [this.userData.username, Validators.compose([
this.usernameValid
])]
}
Run Code Online (Sandbox Code Playgroud)
有人知道我需要改变什么吗?因为表单在输入字段中没有显示任何内容......
我最近从 Angular12 迁移到 Angular14,Angular 在某些地方自动将 FormControl 转换为 UntypedFormControl。我观察到,在我使用 FormControl 的某些组件中,它仍然写为 FormControl。因此,我对哪些标准或在哪些条件下将 FormControl 角度转换为 UntypedFormControl 以及为什么在某些地方它仍然是 FormControl 感到有点困惑。我知道 UntypedFormControl 只是指向任何类型的 FormControl。
当我比较这两种情况时,我没有发现编码以及创建和使用 formGroup 和 formControl 的方式有任何差异。这让我更加困惑。
提前致谢!
formbuilder form-control formgroups angular14 angular-migration
我正在使用flutter_form_builder,我想构建一个动态表单,例如在小部件上回答“是”或“否”,然后在其正下方弹出另一个小部件。
\n例如:“病人吃了什么东西吗?” 是/否。如果是,则显示一个带有复选框“他们吃了什么?”的小部件。米饭、披萨等
\n问题是,当我更改利尿收音机时,FormBuilder 会发出警告:\nI/flutter (21285):警告!替换活动的重复字段 - 只要有意替换该字段,就可以忽略这一点\nI/flutter (21285):警告!替换重复字段以消除 - 只要有意替换该字段,就可以忽略这一点\nI/flutter (21285):警告!忽略字段注销以进行消除——只要该字段被有意替换,就可以忽略它
\n主要问题:那么,UI 上发生的情况是。假设我为“消除”卡选择“模拟”\n然后我更改了“利尿”卡上的选择,然后它抛出上面的错误,\n屏幕重建并且消除卡显示为未选择。
\n我的代码如下。(HMClickableCard 只是一个具有卡片并在其中实现 FormBuilderRadioGroup 的小部件)
\nContainer(\n child: HMClickableCard(\n options: ["Sim", "N\xc3\xa3o"],\n label: "Diurese",\n name: "diuresis",\n icon: Icons.bathroom,\n iconSize: 30,\n onChanged: (option) {\n _fbKey.currentState?.save();\n setState(() {\n switch (option) {\n case "Sim":\n _diuresis = true;\n break;\n case "N\xc3\xa3o":\n _diuresis = false;\n break;\n }\n });\n }),\n ),\n Container(\n child: FormBuilderCheckboxGroup(\n name: "diuresisAspect",\n options: [\n FormBuilderFieldOption(value: "Clara"),\n FormBuilderFieldOption(value: "Amarelo Ouro"),\n FormBuilderFieldOption(value: …Run Code Online (Sandbox Code Playgroud) 所以我有一个表单,其中仅当另一个控件有值时才需要一个控件,为此我创建了以下结构
profileGroup = this.fb.group({
username: [''],
address: [
'',
[
(control: AbstractControl) => {
if (this.profileGroup?.get('username')?.value) {
return (Validators.required)(control);
}
return (Validators.nullValidator)(control);
},
],
],
Run Code Online (Sandbox Code Playgroud)
});
这个函数效果很好,一旦username 控件获得一个值,aValidators.required就会添加到address控件中。但是,尽管添加了验证器,但控件的有效性address并未更新,因此控件仍标记为valid。
如果可能的话我想避免使用类似的东西
this.profileGroup.get('username')?.valueChanges.subscribe(val=>{
this.profileGroup.get('address')?.updateValueAndValidity()
})
Run Code Online (Sandbox Code Playgroud)
因为可能存在我不知道名称的动态控件,并且不想为每个控件设置一个可观察对象。
这是一个工作示例的堆栈闪电战 https://stackblitz.com/edit/angular-10-formbuilder-example-m8qjq8?file=src/app/app.component.ts
formbuilder angular-validation angular angular-reactive-forms angular-validator
formbuilder ×10
forms ×5
php ×4
symfony ×4
angular ×2
actionview ×1
angular14 ×1
choicefield ×1
flutter ×1
form-control ×1
formgroups ×1
observable ×1
ruby ×1
typescript ×1