OctoberCMS。 ajax请求后变量消失

时间:2018-01-11 03:55:44

标签: octobercms

我的组件模板代码:

的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>

并且有效

组件: enter image description here 但如果我发出ajax请求,变量“service”不会显示在partial中。为什么会这样?以及如何避免这种情况?

1 个答案:

答案 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();