我的组件模板代码:
的default.htm:
<div id="filter_variations" style="//display: none;">
{{ form_ajax('onAjaxVariations') }}
<input type="text" id="var_id" name="Filter[id]" value="">
<input type="submit">
{{ form_close() }}
</div>
<div id="partial_service">
{% partial __SELF__ ~ '::service' %}
</div>
在部分我尝试显示“服务”变量和动态“变体”变量:
<h1>{{service.name}}</h1>
<span>Selected variation: variation[0].name</span>
并且有效
组件: 但如果我发出ajax请求,变量“service”不会显示在partial中。为什么会这样?以及如何避免这种情况?
答案 0 :(得分:2)
Ajax处理程序在10月的工作方式与page life cycle
不同。
因此,当您调用页面时,它将initialize page
包含所有数据和所有组件及其life-cycle
方法。
简短所有数据未在
中初始化ajax
请求
你希望service
对象在partial中,所以你正在使用
$this->page['service']
但它尚未初始化,因此无法在ajax中使用,
要在页面
code section
中显示,您需要使用onInit
方法。
function onInit() {
$this['service'] = // your logic to get service and assign it;
}
现在这个service
将在你的ajax处理程序
public function onAjaxVariations(){ // $ this-&gt; page ['service']将可用,现在可以传递给查看; }
在普通网页上刷新它是有效的,因为所有page-cycle function executes
,所有component life-cycle
函数都已执行,因此$this->page['service']
将在此处可用。
所有
component life-cycle
个函数都意味着您的onRender
函数 =&gt; 会调用prepareVars
=&gt; 来指定{{1} (这件事不会在ajax调用中执行)
如果您的代码依赖于页面代码(page lifeCycle)
简短代码写在页面
$this->page['service']
或markup
内,您想先执行在你的ajax处理程序方法中你可以使用这个
code section
它将自动执行所有页面代码,您的所有变量现在都可用。
$this->controller->pageCycle();