1 2 3 4 5 6 7
{/ _form_theme_comment_list.html #组件。树枝#}跨度><跨度类="xml">{% -<跨度类="hljs-name">块跨度>跨度>_blog_post_form_comments_entry_row - %}跨度><跨度类="xml"><<跨度类="hljs-name">李跨度><跨度类="hljs-attr">类跨度>=<跨度类="hljs-string">“…”跨度>>跨度>跨度><跨度类="hljs-template-variable">{{form_row(形式。内容, {标签:假)}}}跨度><跨度类="xml">{{form_row(button_delete_prototype, {label: 'X', attr: {class: 'btn btn-outline-danger'}})}}跨度><跨度类="xml"><跨度类="hljs-name">李跨度>>跨度>跨度><跨度类="hljs-template-tag">{%<跨度类="hljs-name">endblock跨度>跨度>%}跨度>
请注意跨度>
您可以将表单主题放入组件模板中并使用{% form_theme form _self %}
.但是,因为组件模板没有扩展任何东西,所以它不会像预期的那样工作,您必须指出form_theme
到一个单独的模板。看到如何处理表单主题.
覆盖通用按钮和集合条目:
的添加
而且删除
按钮呈现为独立的ButtonType
表单类型,并且可以像普通表单类型一样通过live_collection_button_add
而且live_collection_button_delete
块前缀分别为:
12 3 4 5 6 7 8 9 10 11 12
{%<跨度类="hljs-name">块跨度>跨度>live_collection_button_add_widget %}跨度><跨度类="xml">{%<跨度类="hljs-name">集跨度>跨度>Attr = Attr |<跨度类="hljs-keyword">合并跨度>({“类”:attr.class |<跨度类="hljs-keyword">默认的跨度>('btn btn-ghost')}) %}跨度><跨度类="xml">{%<跨度类="hljs-name">集跨度>跨度>Translation_domin = false %}跨度><跨度类="xml">{%<跨度类="hljs-name">集跨度>跨度>Label_html = true %}跨度><跨度类="xml">{% -<跨度类="hljs-name">集跨度>跨度>标签- - - - - - %}跨度><跨度类="xml"><<跨度类="hljs-name">svg跨度><跨度类="hljs-attr">xmlns跨度>=<跨度类="hljs-string">“http://www.w3.org/2000/svg”跨度><跨度类="hljs-attr">类跨度>=<跨度类="hljs-string">“货币供应量w-6”跨度><跨度类="hljs-attr">填满跨度>=<跨度类="hljs-string">“没有”跨度><跨度类="hljs-attr">viewBox跨度>=<跨度类="hljs-string">"0 0 24 24"跨度><跨度类="hljs-attr">中风跨度>=<跨度类="hljs-string">“currentColor”跨度><跨度类="hljs-attr">笔划宽度跨度>=<跨度类="hljs-string">“2”跨度>>跨度><跨度类="hljs-tag"><<跨度类="hljs-name">路径跨度><跨度类="hljs-attr">stroke-linecap跨度>=<跨度类="hljs-string">“圆”跨度><跨度类="hljs-attr">stroke-linejoin跨度>=<跨度类="hljs-string">“圆”跨度><跨度类="hljs-attr">d跨度>=<跨度类="hljs-string">“M12 6v6m0 0v6m0-6h6m-6 0H6”跨度>/>跨度><跨度类="hljs-tag"><跨度类="hljs-name">svg跨度>>跨度>跨度><跨度类="hljs-template-variable">{{form.collection.button.add。标签'|trans({}, 'forms')}}跨度><跨度类="xml">{% -<跨度类="hljs-name">endset跨度>跨度>- - - - - - %}跨度><跨度类="xml">{{<跨度类="hljs-name">块跨度><跨度类="hljs-params">(“button_widget”)跨度>}}跨度><跨度类="xml">{%<跨度类="hljs-name">endblock跨度>跨度>live_collection_button_add_widget %}跨度>
控件相关的块要控制每行的呈现方式,可以重写LiveCollectionType
.这与传统的收集类型,但你应该使用live_collection_ *
而且live_collection_entry_ *
而是作为前缀。
例如,默认情况下,添加按钮被放置在条目之后(在我们的例子中是注释)。让我们赶在他们前面。
1 2 3 4 5 6
{% -<跨度类="hljs-name">块跨度>跨度>李ve_collection_widget - %}跨度><跨度类="xml">{% -<跨度类="hljs-name">如果跨度>跨度>定义了Button_add而不是Button_add。使- - - - - - %}跨度><跨度类="xml">{{form_row(button_add)}}跨度><跨度类="xml">{% -<跨度类="hljs-name">endif跨度>跨度>- - - - - - %}跨度><跨度类="xml">{{<跨度类="hljs-name">块跨度><跨度类="hljs-params">(“form_widget”)跨度>}}跨度><跨度类="xml">{% -<跨度类="hljs-name">endblock跨度>跨度>- - - - - - %}跨度>
现在在每行周围添加一个div:
1 2 3 4 5 6 7 8
{% -<跨度类="hljs-name">块跨度>跨度>李ve_collection_entry_row - %}跨度><跨度类="xml"><<跨度类="hljs-name">div跨度>>跨度>跨度><跨度类="hljs-template-variable">{{<跨度类="hljs-name">块跨度><跨度类="hljs-params">(“form_row”)跨度>}}跨度><跨度类="xml">{% -<跨度类="hljs-name">如果跨度>跨度>定义了Button_delete而不是Button_delete。使- - - - - - %}跨度><跨度类="xml">{{form_row(button_delete)}}跨度><跨度类="xml">{% -<跨度类="hljs-name">endif跨度>跨度>- - - - - - %}跨度><跨度类="xml"><跨度类="hljs-name">div跨度>>跨度>跨度><跨度类="hljs-template-tag">{% -<跨度类="hljs-name">endblock跨度>跨度>- - - - - - %}跨度>
作为另一个例子,让我们为live collection类型创建一个通用的bootstrap 5主题,呈现表行的每一项:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
{% -<跨度类="hljs-name">块跨度>跨度>李ve_collection_widget - %}跨度><跨度类="xml"><<跨度类="hljs-name">表格跨度><跨度类="hljs-attr">类跨度>=<跨度类="hljs-string">“table table-border - form-no-mb”跨度>>跨度><跨度类="hljs-tag"><<跨度类="hljs-name">thead跨度>>跨度><跨度类="hljs-tag"><<跨度类="hljs-name">tr跨度>>跨度>跨度><跨度类="hljs-template-tag">{%<跨度类="hljs-name">为跨度>跨度>表单|中的子元素<跨度类="hljs-keyword">最后的跨度>%}跨度><跨度类="xml"><<跨度类="hljs-name">道明跨度>>跨度>跨度><跨度类="hljs-template-variable">{{form_label(child)}}跨度><跨度类="xml"><跨度类="hljs-name">道明跨度>>跨度>跨度><跨度类="hljs-template-tag">{%<跨度类="hljs-name">endfor跨度>跨度>%}跨度><跨度类="xml"><<跨度类="hljs-name">道明跨度>>跨度><跨度类="hljs-tag"><跨度类="hljs-name">道明跨度>>跨度><跨度类="hljs-tag"><跨度类="hljs-name">tr跨度>>跨度><跨度类="hljs-tag"><跨度类="hljs-name">thead跨度>>跨度><跨度类="hljs-tag"><<跨度类="hljs-name">tbody跨度>>跨度>跨度><跨度类="hljs-template-variable">{{<跨度类="hljs-name">块跨度><跨度类="hljs-params">(“form_widget”)跨度>}}跨度><跨度类="xml"><跨度类="hljs-name">tbody跨度>>跨度><跨度类="hljs-tag"><跨度类="hljs-name">表格跨度>>跨度>跨度><跨度类="hljs-template-tag">{% -<跨度类="hljs-name">如果跨度>跨度>skip_add_button|<跨度类="hljs-keyword">默认的跨度>(假)与(false)相同,并且定义了button_add而不是button_add。使- - - - - - %}跨度><跨度类="xml">{{form_widget(button_add, {label: '+添加项目',attr:{类:'btn btn-outline-primary'}})}}跨度><跨度类="xml">{% -<跨度类="hljs-name">endif跨度>跨度>- - - - - - %}跨度><跨度类="xml">{% -<跨度类="hljs-name">endblock跨度>跨度>- - - - - - %}跨度><跨度类="xml">{% -<跨度类="hljs-name">块跨度>跨度>李ve_collection_entry_row - %}跨度><跨度类="xml"><<跨度类="hljs-name">tr跨度>>跨度>跨度><跨度类="hljs-template-tag">{%<跨度类="hljs-name">为跨度>跨度>表单%}中的子元素跨度><跨度类="xml"><<跨度类="hljs-name">道明跨度>>跨度>跨度><跨度类="hljs-template-variable">{{- form_row(child, {label: false}) -}}跨度><跨度类="xml"><跨度类="hljs-name">道明跨度>>跨度>跨度><跨度类="hljs-template-tag">{%<跨度类="hljs-name">endfor跨度>跨度>%}跨度><跨度类="xml"><<跨度类="hljs-name">道明跨度>>跨度>跨度><跨度类="hljs-template-variable">{{- form_row(button_delete, {label: 'X', attr: {class: 'btn btn-outline-danger'}}) -}}跨度><跨度类="xml"><跨度类="hljs-name">道明跨度>>跨度><跨度类="hljs-tag"><跨度类="hljs-name">tr跨度>>跨度>跨度><跨度类="hljs-template-tag">{% -<跨度类="hljs-name">endblock跨度>跨度>- - - - - - %}跨度>
若要稍后在模板中呈现添加按钮,可以使用skip_add_button
,然后手动渲染:
12 3 4 5 6 7 8 9 10 11 12 13 14
<<跨度类="hljs-name">表格跨度><跨度类="hljs-attr">类跨度>=<跨度类="hljs-string">“table table-border - form-no-mb”跨度>>跨度><跨度类="hljs-tag"><<跨度类="hljs-name">thead跨度>>跨度><跨度类="hljs-tag"><<跨度类="hljs-name">tr跨度>>跨度><跨度类="hljs-tag"><<跨度类="hljs-name">道明跨度>>跨度>项<跨度类="hljs-tag"><跨度类="hljs-name">道明跨度>>跨度><跨度类="hljs-tag"><<跨度类="hljs-name">道明跨度>>跨度>优先级<跨度类="hljs-tag"><跨度类="hljs-name">道明跨度>>跨度><跨度类="hljs-tag"><<跨度类="hljs-name">道明跨度>>跨度><跨度类="hljs-tag"><跨度类="hljs-name">道明跨度>>跨度><跨度类="hljs-tag"><跨度类="hljs-name">tr跨度>>跨度><跨度类="hljs-tag"><跨度类="hljs-name">thead跨度>>跨度><跨度类="hljs-tag"><<跨度类="hljs-name">tbody跨度>>跨度>跨度><跨度类="hljs-template-variable">{{form_row(形式。todoItems, {skip_add_button: true})跨度><跨度类="xml"><跨度类="hljs-name">tbody跨度>>跨度><跨度类="hljs-tag"><跨度类="hljs-name">表格跨度>>跨度>跨度><跨度类="hljs-template-variable">{{form_widget (form.todoItems.vars。button_add, {标签:'+ Add Item', attr: { class: 'btn btn-outline-primary' } }) }}跨度>
让我们再次查看一个组件来编辑帖子
教义的实体:
12 3 4 5 6 7 8 9 10 11 12
名称空间跨度><跨度类="hljs-title">应用程序跨度>\<跨度类="hljs-title">嫩枝跨度>\<跨度类="hljs-title">组件跨度>;<跨度类="hljs-keyword">使用跨度><跨度类="hljs-title">应用程序跨度>\<跨度类="hljs-title">实体跨度>\<跨度类="hljs-title">帖子跨度>;<跨度类="hljs-keyword">使用跨度><跨度类="hljs-title">ob娱乐下载\<跨度类="hljs-title">用户体验跨度>\<跨度类="hljs-title">LiveComponent跨度>\<跨度类="hljs-title">属性跨度>\<跨度类="hljs-title">AsLiveComponent跨度>;<跨度类="hljs-keyword">使用跨度><跨度类="hljs-title">ob娱乐下载\<跨度类="hljs-title">用户体验跨度>\<跨度类="hljs-title">LiveComponent跨度>\<跨度类="hljs-title">属性跨度>\<跨度类="hljs-title">LiveProp跨度>;<跨度类="hljs-comment"># (AsLiveComponent (edit_post)]跨度><跨度类="hljs-class">类跨度><跨度类="hljs-title">EditPostComponent跨度>跨度>{<跨度类="hljs-comment"># (LiveProp)跨度><跨度类="hljs-keyword">公共跨度>帖子<跨度类="hljs-variable">$跨度>帖子跨度>;}
这一次,让我们呈现一个HTML表单(没有Symfony的form组件)和一个“预览”区域,在ob娱乐下载这里用户可以在输入时看到文章的外观(包括已呈现的表单)内容
通过Markdown过滤器树枝/ markdown-extra
库):
1 2 3 4 5 6 7 8 9 10
<<跨度类="hljs-name">div跨度>跨度>跨度><跨度类="hljs-template-variable">{{attributes}}跨度><跨度类="xml">>跨度><跨度类="hljs-tag"><<跨度类="hljs-name">输入跨度><跨度类="hljs-attr">数据模型的跨度>=<跨度类="hljs-string">“post.title”跨度>>跨度><跨度类="hljs-tag"><<跨度类="hljs-name">文本区域跨度><跨度类="hljs-attr">数据模型的跨度>=<跨度类="hljs-string">“post.content”跨度>>跨度><跨度类="hljs-tag"><跨度类="hljs-name">文本区域跨度>>跨度><跨度类="hljs-tag"><<跨度类="hljs-name">div跨度><跨度类="hljs-attr">数据加载跨度>=<跨度类="hljs-string">最好选择用addClass (low-opacity替代“)”跨度>>跨度><跨度类="hljs-tag"><<跨度类="hljs-name">h3跨度>>跨度>跨度><跨度类="hljs-template-variable">{{职位。标题}}跨度><跨度类="xml"><跨度类="hljs-name">h3跨度>>跨度>跨度><跨度类="hljs-template-variable">{{职位。内容|markdown_to_html }}跨度><跨度类="xml"><跨度类="hljs-name">div跨度>>跨度><跨度类="hljs-tag"><跨度类="hljs-name">div跨度>>跨度>跨度>
这非常简单,除了一件事:数据模型的
属性(如。post.content
不是针对组件类本身的属性,而是针对嵌套的属性中的美元的帖子
属性对象。
修改嵌套属性是开箱即用的不允许的。方法来启用它暴露
选择:
1 2 3 4 5 6 7 8 9 10
/ /……类EditPostComponent {<跨度类="hljs-deletion">- # (LiveProp)跨度><跨度类="hljs-addition">+ #[LiveProp(exposed: ['title', 'content'])]跨度>公共帖子$帖子;//……}
现在,两个标题
和内容
的属性美元的帖子
财产可以由用户修改。但是,请注意LiveProp
做不有可写= true
.这意味着标题
而且内容
属性可以更改帖子
对象本身<强大的>不能强大的>被改变。换句话说,如果组件最初是用id=2的Post对象创建的,那么不良用户可能会不执行一个请求,渲染id=3的组件。您的组件是受保护的,以防止某人更改以查看不同的表单帖子
对象,除非您添加可写= true
对这个性质。
如果你在构建一个表单没有使用Symfob娱乐下载ony的表单组件,您可以仍然验证您的数据。
首先使用ValidatableComponentTrait
并添加任何你需要的约束:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
使用跨度><跨度类="hljs-title">应用程序跨度>\<跨度类="hljs-title">实体跨度>\<跨度类="hljs-title">用户跨度>;<跨度类="hljs-keyword">使用跨度><跨度类="hljs-title">ob娱乐下载\<跨度类="hljs-title">用户体验跨度>\<跨度类="hljs-title">LiveComponent跨度>\<跨度类="hljs-title">属性跨度>\<跨度类="hljs-title">AsLiveComponent跨度>;<跨度类="hljs-keyword">使用跨度><跨度类="hljs-title">ob娱乐下载\<跨度类="hljs-title">用户体验跨度>\<跨度类="hljs-title">LiveComponent跨度>\<跨度类="hljs-title">属性跨度>\<跨度类="hljs-title">LiveProp跨度>;<跨度类="hljs-keyword">使用跨度><跨度类="hljs-title">ob娱乐下载\<跨度类="hljs-title">用户体验跨度>\<跨度类="hljs-title">LiveComponent跨度>\<跨度类="hljs-title">ValidatableComponentTrait跨度>;<跨度类="hljs-keyword">使用跨度><跨度类="hljs-title">ob娱乐下载\<跨度类="hljs-title">组件跨度>\<跨度类="hljs-title">验证器跨度>\<跨度类="hljs-title">约束跨度><跨度类="hljs-title">作为跨度><跨度类="hljs-title">断言跨度>;<跨度类="hljs-comment"># (AsLiveComponent (edit_user)]跨度><跨度类="hljs-class">类跨度><跨度类="hljs-title">EditUserComponent跨度>跨度>{<跨度类="hljs-keyword">使用跨度><跨度类="hljs-title">ValidatableComponentTrait跨度>;<跨度类="hljs-comment">#[LiveProp(exposed: ['email', 'plainPassword'])]跨度><跨度类="hljs-comment">#[断言有效\]跨度><跨度类="hljs-keyword">公共跨度>用户<跨度类="hljs-variable">$跨度>用户跨度>;<跨度类="hljs-comment"># (LiveProp)跨度><跨度类="hljs-comment">#(断言\ IsTrue)跨度><跨度类="hljs-keyword">公共跨度>保龄球<跨度类="hljs-variable">$跨度>agreeToTerms跨度>=<跨度类="hljs-keyword">假跨度>;}
一定要添加IsValid
属性/注释到任何属性,您希望在其中验证该属性上的对象。
多亏了这个设置,组件现在将在每次渲染时自动验证,但是以一种聪明的方式:只有在前端的“模型”更新后,属性才会被验证。系统会跟踪哪些模型已经更新,并且只在重新渲染时存储这些字段的错误。
您还可以触发验证您的整个在操作中手动创建对象:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16
使用跨度><跨度类="hljs-title">ob娱乐下载\<跨度类="hljs-title">用户体验跨度>\<跨度类="hljs-title">LiveComponent跨度>\<跨度类="hljs-title">属性跨度>\<跨度类="hljs-title">LiveAction跨度>;<跨度类="hljs-comment"># (AsLiveComponent (edit_user)]跨度><跨度类="hljs-class">类跨度><跨度类="hljs-title">EditUserComponent跨度>跨度>{<跨度类="hljs-comment">/ /……跨度><跨度类="hljs-comment"># (LiveAction)跨度><跨度类="hljs-keyword">公共跨度><跨度类="hljs-function">函数跨度><跨度类="hljs-title">保存跨度><跨度类="hljs-params">()跨度>跨度>{<跨度类="hljs-comment">//如果验证失败,将抛出异常跨度><跨度类="hljs-variable">$跨度>这跨度><跨度类="hljs-operator">->跨度>validate ();<跨度类="hljs-comment">//执行保存操作跨度>}}
如果验证失败,则抛出异常,但组件将被重新呈现。在模板中,使用getError ()
方法:
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21 22
{%<跨度类="hljs-name">如果跨度>跨度>这.getError (post.content) %}跨度><跨度类="xml"><<跨度类="hljs-name">div跨度><跨度类="hljs-attr">类跨度>=<跨度类="hljs-string">“错误”跨度>>跨度>跨度><跨度类="hljs-template-variable">{{this.getError(“post.content”)。消息}}跨度><跨度类="xml"><跨度类="hljs-name">div跨度>>跨度>跨度><跨度类="hljs-template-tag">{%<跨度类="hljs-name">endif跨度>跨度>%}跨度><跨度类="xml"><<跨度类="hljs-name">文本区域跨度><跨度类="hljs-attr">数据模型的跨度>=<跨度类="hljs-string">“post.content”跨度><跨度类="hljs-attr">类跨度>=<跨度类="hljs-string">"跨度>跨度>跨度><跨度类="hljs-template-variable">{{this.getError('post.content') ?'has-error': "}}跨度><跨度类="xml">"跨度>>跨度><跨度类="hljs-tag"><跨度类="hljs-name">文本区域跨度>>跨度>跨度><跨度类="hljs-template-tag">{%<跨度类="hljs-name">如果跨度>跨度>这.getError (agreeToTerms) %}跨度><跨度类="xml"><<跨度类="hljs-name">div跨度><跨度类="hljs-attr">类跨度>=<跨度类="hljs-string">“错误”跨度>>跨度>跨度><跨度类="hljs-template-variable">{{this.getError(“agreeToTerms”)。消息}}跨度><跨度类="xml"><跨度类="hljs-name">div跨度>>跨度>跨度><跨度类="hljs-template-tag">{%<跨度类="hljs-name">endif跨度>跨度>%}跨度><跨度类="xml"><<跨度类="hljs-name">输入跨度><跨度类="hljs-attr">类型跨度>=<跨度类="hljs-string">“复选框”跨度><跨度类="hljs-attr">数据模型的跨度>=<跨度类="hljs-string">“agreeToTerms”跨度><跨度类="hljs-attr">类跨度>=<跨度类="hljs-string">"跨度>跨度>跨度><跨度类="hljs-template-variable">{{this.getError('agreeToTerms') ?'has-error': "}}跨度><跨度类="xml">"跨度>/>跨度><跨度类="hljs-tag"><<跨度类="hljs-name">按钮跨度><跨度类="hljs-attr">类型跨度>=<跨度类="hljs-string">“提交”跨度><跨度类="hljs-attr">data-action跨度>=<跨度类="hljs-string">“生活#行动”跨度><跨度类="hljs-attr">data-action-name跨度>=<跨度类="hljs-string">“防止|保存”跨度>>跨度>保存<跨度类="hljs-tag"><跨度类="hljs-name">按钮跨度>>跨度>跨度>
一旦组件被验证,组件将“记住”它已被验证。这意味着,如果您编辑一个字段并且组件重新呈现,它将再次被验证。
1 2 3 4
+ data-poll跨度>>
这将每2秒发出一个请求来重新呈现组件。你可以通过添加a来改变这个延迟()
修饰符。执行此操作时,需要明确要调用的对象美元呈现
方法。延迟500ms:
1 2 3 4
<<跨度类="hljs-name">div跨度>跨度>跨度><跨度类="hljs-template-variable">{{attributes}}跨度><跨度类="xml">data-poll跨度>=<跨度类="hljs-string">“延迟(500)| $渲染”跨度>>跨度>跨度>
你也可以触发一个特定的“动作”,而不是正常的重新渲染:
1 2 3 4 5 6 7 8 9
<<跨度类="hljs-name">div跨度>跨度>跨度><跨度类="hljs-template-variable">{{attributes}}跨度><跨度类="xml">data-poll跨度>=<跨度类="hljs-string">“保存”跨度>跨度>跨度><跨度类="hljs-comment">{#或添加一个delay()修饰符:data-poll="delay(2000)|save" #}跨度><跨度类="xml">>跨度>跨度>
12 3 4 5 6 7 8 9 10 11 12
{/组件/ todo_list.html #模板。树枝#}跨度><跨度类="xml"><<跨度类="hljs-name">div跨度>跨度>跨度><跨度类="hljs-template-variable">{{attributes}}跨度><跨度类="xml">>跨度><跨度类="hljs-tag"><<跨度类="hljs-name">输入跨度><跨度类="hljs-attr">数据模型的跨度>=<跨度类="hljs-string">“listName”跨度>>跨度>跨度><跨度类="hljs-template-tag">{%<跨度类="hljs-name">为跨度>跨度>来做in todos %}跨度><跨度类="xml">...跨度><跨度类="hljs-template-tag">{%<跨度类="hljs-name">endfor跨度>跨度>%}跨度><跨度类="xml">{{component('todo_footer', {count: todos|<跨度类="hljs-keyword">长度跨度>)}}}跨度><跨度类="xml"><跨度类="hljs-name">div跨度>>跨度>跨度>
假设用户更新了listName
模型和父组件重新呈现。在本例中,子组件将会不重新呈现。为什么?因为活动组件系统将检测到没有传递任何值成todo_footer
(就数
在这种情况下)。有改变。如果对子进程的输入没有改变,就不需要重新呈现它。
但是如果用户添加了新待办事项项和待办事项数由5个变更为6个,此将改变数
属性的值todo_footer
.在这种情况下,在父组件重新呈现之后,子请求将立即发出第二个Ajax请求来呈现自己。聪明!
当用户单击该按钮时,它将尝试调用保存
行动在孩子组件只有,即使保存
Action实际上只存在于父类中。同样适用于数据模型的
,尽管对于这种情况有一些特殊的处理(见下一点)。
当用户更改此字段时,这将只有更新价值
在孩子组件…因为(是的,我们再说一遍):每个组件都是它自己的、孤立的宇宙。
然而,有时候这并不是你想要的!有时,当子模型发生变化时,也应该更新父模型。要做到这一点,传递adataModel
(或数据模型的
)属性给孩子:
1 2 3 4 5 6
{/组件/ post_form.html #模板。树枝#}跨度><跨度类="xml">{{component('textarea_field', {dataModel: 'value:content', error: this.getError('content'),})}}跨度>
这做了两件事:
价值
将被传递到textarea_field
设置为内容
从父组件(即与手动传递相同价值:内容
到组件中)。李><李>当价值
道具的内部变化textarea_field
,内容
父组件上的Prop将会改变。李>这个结果就是价值
更改时,父组件也将重新呈现,这要感谢它的内容
支持改变。
请注意跨度>
如果你改变LiveProp
子组件的服务器(例如,在重新渲染期间或通过一个动作),该更改将不反映在共享该模型的任何父组件上。
如果调用子组件模型价值
,你也可以缩短语法:
1 2 3 4
<!——与"value:content"相同——>跨度>跨度><跨度类="hljs-template-variable">{{component('textarea_field', {dataModel: 'content',})}}跨度>
如果你的子组件有多个模型,用空格分隔每个模型:
1 2 3
{{component('textarea_field', {dataModel: '用户。firstName:首先用户。lastName:last',})}}跨度>
在这种情况下,子组件将接收第一个
而且最后的
道具。当这些更新时user.firstName
而且user.lastName
模型将在父节点上更新。
但是目前正在考虑实验,这意味着它暂时不受Symfony的BC政策的约束。ob娱乐下载