Save & Apply mechanism of luci

用luci框架创建luci界面的时候,页面默认具备“保存&应用”,“保存”,“重置”,“帮助”等控件,当然,“帮助”控件会判断开发者有没有设置相对应的帮助页面来决定要不要显示该控件。由于是利用框架创建的控件,所以要获取控件状态就需要对框架有所了解。

应用1:在配置界面中判断是否 “save & apply” “save”控件是否按下,获取这个控件按下的消息,然后做相应的处理。其实,这几个控件的响应机制是做在/luci/view/cbi/footer.tm中:

        <%- if pageaction then -%>
       


                <% if redirect then %>
               

                       
               

                <% end %>


                <% if flow.skip then %>
                       
                <% end %>
                <% if not autoapply then %>
                        name="cbi.apply" value="<%:Save & Apply%>" οnclick="window.parent.scrollTo(0,0)" />
                <% end %>
                name="cbi.save" value="<%:Save%>" οnclick="window.parent.scrollTo(0,0)" />
               
                <% if help_url then %>
               
                <% end %>
               
       

        <%- end -%>

<%+footer%>

从代码看出,这个是htm文件中定义了,页面的控件名字,消息名字,动作相应等等,比如对“Save & Apply”的定义:

name="cbi.apply" value="<%:Save & Apply%>" οnclick="window.parent.scrollTo(0,0)" />

cbi.apply是广播出去的消息名字,那么,开发者可以在mode下面用CBI创建配置界面的时候用:

local apply = luci.http.formvalue("cbi.apply")
if apply then
        luci.sys.exec("uci commit network")
end   

来截取消息,然后做相应的处理,

对“Save"控件也是一样的,处理方式,但是apply机制有在 luci/view/cbi/apply_xhr.htm中做另外的一种XHR机制,就是在点击“save & apply”之后在页眉显示处理的进程:比如正在配置哪个文件,等等。


你可能感兴趣的:(uci)