我试图在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函数将脚本作为参数?
提前感谢您的帮助。
答案 0 :(得分:1)
我是使用视图模板完成的。
您必须设置一个"条目(...)"在"索引()"功能在"控制器/" 。目录
该条目将路径(LuCI URL的最后一部分)与模板视图,cbi或 LUA功能相关联,这正是您想要的。
请注意,当您手动更改目标openwrt设备上的控制器文件时,必须删除/ tmp / luci-indexcache,以便LuCI调度程序不使用旧版本。
然后在模板中你可以使用" luci.dispatcher.build_url()"创建将使控制器调用该函数的URL,并将其作为按钮的目标URL(通过或者onClick =" document.location = ...">等等上)