我试图通过将一些逻辑移入FormBuilder来干掉一些代码.在阅读有关如何选择和替代表单构建器的文档后,对我来说逻辑解决方案似乎是这样的.
在视图中
<% form_for @event, :builder => TestFormBuilder do |f| %>
<%= f.test %>
<%= f.submit 'Update' %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
然后在app/helpers/application_helper.rb中
module ApplicationHelper
class TestFormBuilder < ActionView::Helpers::FormBuilder
def test
puts 'apa'
end
end
end
Run Code Online (Sandbox Code Playgroud)
但是,这在"form_for"中给出了一个错误
uninitialized constant ActionView::Base::CompiledTemplates::TestFormBuilder
Run Code Online (Sandbox Code Playgroud)
我在哪里做错了?
我有以下问题:在我的应用程序中我有一个巨大的形式与嵌套的formbuilder,它工作得很好,但是当用户提交表单时,我想将完整的表单标记为Touched(运行验证),代码是
constructor(private fb: FormBuilder) {
this.form= fb.group({
field1: [null],
field2: [null],
nestedForm1: fb.group({
field3: [null, Validators.required],
field4: [null]
}),
nestedForm2: fb.group({
field5: [null, Validators.required],
field6: [null, Validators.required]
})
});
}
Run Code Online (Sandbox Code Playgroud)
当我跑:
this.form.markAsTouched();
Run Code Online (Sandbox Code Playgroud)
只有Field1和Field2被标记,有没有办法让我不知道这样做?
任何人都可以建议如何在我的表单窗口中自定义错误消息,例如"此值无效","密码不匹配"显示为空字段的弹出错误消息?
我的问题如下.
我在表单构建器中有一个下拉列表,它成功地从数据库中检索数据.
public function buildForm(FormBuilder $builder, array $options) {
$builder->add('Statusname', 'entity', array('empty_value' => 'All','class' => 'MyProject\EntityBundle\Entity\IssueStatusType', 'property' => 'name', 'required' => false,'query_builder' => function ($repository) { return $repository->createQueryBuilder('es')->orderBy('es.name', 'ASC'); },))
}
Run Code Online (Sandbox Code Playgroud)
它工作正常.但是当我添加自定义数据时
'not closed' => 'Not closed'
Run Code Online (Sandbox Code Playgroud)
进入下拉列表即
public function buildForm(FormBuilder $builder, array $options) {
$builder->add('Statusname', 'entity', array('empty_value' => 'All','not closed' => 'Not closed','class' => 'MyProject\EntityBundle\Entity\IssueStatusType', 'property' => 'name', 'required' => false,'query_builder' => function ($repository) { return $repository->createQueryBuilder('es')->orderBy('es.name', 'ASC'); },))
}
Run Code Online (Sandbox Code Playgroud)
这是行不通的.有人可以告诉我为什么吗?
提前致谢.
我正在尝试将工具提示添加到只读输入,这些输入可能并不总是足够宽以显示完整内容.当用户将鼠标悬停在输入上时,工具提示将用于显示完整内容.
问题是我似乎无法访问表单生成器参数部分中的资源属性.我正在努力使输入的值成为标题.请参阅以下代码:
= f.fields_for :invoice_items, @invoice.invoice_items do |item|
%tr
%td
= item.text_field :code, :title => item.name, :rel=>'tooltip', :class => 'uneditable-input span1', :readonly=>'true
Run Code Online (Sandbox Code Playgroud)
举:
undefined method `name' for #<ActionView::Helpers::FormBuilder:0x007fea1e86f8e8>
Run Code Online (Sandbox Code Playgroud)
现在我们可以看到该项实际上不是资源,而是表单构建器类.如何从此处访问原始资源?
我正在研究POC(概念证明),我正在评估Orbeon表单构建器/运行器.我正在使用社区版,以防万一,我需要更改代码,否则专业版将为POC做.
我正在将FormRunner与我在不同Web服务器上运行的Web应用程序集成,后者将使用一些自定义查询参数调用FormRunner URL.
我想从FormRunner中删除Summary,PDF和Review按钮,只是希望保存按钮作为提交按钮,所以点击它会将POST数据提交到我的自定义Java代码,该代码将与我的Web应用程序对话,可能通过REST API.然后,提交按钮会将我重定向到另一个页面,上面写着"您的数据已被提交".
我发现很难理解我可以更改预期行为代码的区域.你可以在这方面给我一些指示吗?
谢谢和问候,Mayuresh.
我正在使用Symfony和FormBuilder创建几个表单.通常我提供一个平面对象,它包含表单需要访问的所有属性.这很好用.表单使用正确的值填充对象,我可以将其作为json发送到处理它的Web服务(因此我根本不访问数据库).但在几种情况下,我从Web服务获得了必须更新的嵌套对象,或者我必须将嵌套对象(作为json)发送到服务,我想知道是否可以访问表单中嵌套对象的属性.
通常你这样做
$form = $this->createFormBuilder($myObject)
->add('myProp', 'text', array(
'label'=>$this->get('translator')->trans('my Property')
))
Run Code Online (Sandbox Code Playgroud)
但在我的情况下,myObject拥有另一个对象,其中包含一些属性.所以我需要做这样的事情:
$form = $this->createFormBuilder($myObject)
->add('nestedObj.myProp', 'text', array(
'label'=>$this->get('translator')->trans('my Property')
))
Run Code Online (Sandbox Code Playgroud)
但不幸的是,这似乎不起作用.是否有另一种解决方案来处理嵌套对象和表单?
那里,
我正在使用 Jquery 表单构建器 ( https://formbuilder.online/ ),我完成了任务:向表单构建器添加自定义字段。
我想在不改变这个 jquery 插件的核心的情况下做到这一点。我已经发现我可以在其他更改之间将其添加到函数“fieldRender”中。
这样做我会丢失这个项目的更新,而且这个自定义字段太具体了,无法提供给项目本身。
我已经找了一段时间了,但还没有找到:有谁知道是否可以通过某种扩展策略添加自定义字段,这样我就可以每次都无需更改核心代码就可以构建自定义字段?
谢谢,
我们的想法是让用户POST表单.并触发API返回的错误,如果用户已经注册,则将电子邮件字段设置为错误.
我使用FormBuilder的反应形式,我尝试在订阅错误捕获器中调用验证器:
构造函数:
this.email = fb.control('', [Validators.required, Validators.pattern(/^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/), SignupComponent.alreadyExist()]);
this.username = fb.control('', [Validators.required, Validators.pattern(/^([A-ZÀ-ÿa-z0-9]{2,})+(?:[ _-][A-ZÀ-ÿa-z0-9]+)*$/)]);
this.userRegisterForm = fb.group({
email: this.email,
username: this.username
});
Run Code Online (Sandbox Code Playgroud)
自定义alreadyExist()验证器:
static alreadyExist(alreadyExist: boolean = false): any {
return (control: FormControl): { [s: string]: boolean } => {
if(alreadyExist) {
return { emailAlreadyExist: true }
}
}
}
Run Code Online (Sandbox Code Playgroud)
}
onSubmit():
this.user.create(newUser)
.subscribe(
data => {
this.router.navigate(['signin']);
},
error => {
if(error.status === 401) {
// CALL THE VALIDATOR HERE TO SET : FALSE
SignupComponent.alreadyExist(true);
}
this.loading = …Run Code Online (Sandbox Code Playgroud) 所以我正在构建一个拖放表单构建器,我想在所有输入readOnly上创建一个特定字段.这可以
日期输入
所有这些输入都将动态生成.
我看看 如何使用javascript在所有输入字段上添加readonly属性? & 如何在具有相同类的多个文本框上将readonly属性设置为false?
但没有一个只是通过类名输入名称readOnly.
我目前正在这样做:
$("#editClick").on('click', function(){
$('.myNameClass').attr('readonly', false);
Run Code Online (Sandbox Code Playgroud)
});
但每次在页面上出现新字段时都需要一种方法来触发它(即检查是否增加了一个类的长度)
就像是:
if ($(".myNameClass")[0]).increases -> fire event-> and every time it does
Run Code Online (Sandbox Code Playgroud) formbuilder ×10
symfony ×3
forms ×2
javascript ×2
jquery ×2
actionview ×1
angular ×1
html ×1
nested ×1
orbeon ×1
php ×1
typescript ×1
xforms ×1