如何在没有UCI副作用的情况下在OpenWRT LUCI中实现具有后端操作的按钮

时间:2013-12-26 04:41:43

标签: button model openwrt

我试图在LuCI中实现一个按钮,当单击它时,在后端运行一个shell脚本。这是此的型号代码:

field_var_36 = section_var_7:option(Button,"buttonkk36",translate("ButtonKK")) 
field_var_36.inputstyle = "apply" 
field_var_36.rmempty = true 
function field_var_36.write(self, section)
    luci.sys.call('echo "ABCDEFG123" >/dev/null')
end

虽然这样做但它有一些不必要的副作用。页面中所有未保存的修改都会被保存,我会在顶部收到“n未保存的更改”通知。我的猜测是按钮,如果是“提交”类型,并且html“表单”中的所有字段都是“sumbitted”。我不希望这种情况发生。该按钮需要是独立的。可以这样做吗?

我尝试的另一个选项是使用带有按钮实现的模板。但我不知道如何将其连接到后端脚本。 LuCI中是否有javascript API函数将脚本作为参数?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我是使用视图模板完成的。

您必须设置一个"条目(...)"在"索引()"功能在"控制器/" 。目录

该条目将路径(LuCI URL的最后一部分)与模板视图,cbi或 LUA功能相关联,这正是您想要的。

请注意,当您手动更改目标openwrt设备上的控制器文件时,必须删除/ tmp / luci-indexcache,以便LuCI调度程序不使用旧版本。

然后在模板中你可以使用" luci.dispatcher.build_url()"创建将使控制器调用该函数的URL,并将其作为按钮的目标URL(通过或者onClick =" document.location = ...">等等上)