Fast中AJAX表单提交后如何实现跳转
Fast默认采用iframe窗加载页面,直接使用JS提供的跳转方法会出现各种问题,分享一下在项目中自己使用的方法ly9vMzC8IDR87JICVFd2BA==
我们只需要在表单回调事件中加入如下代码,即可实现完美的跳转并且兼容Toastr的提示DfL7QA91tmWIyelg+42+7Q==Form.api.bindevent($("form[role=form]"), function(data, ret){
//注意这里显示提示信息 一定要加上 top
top.Toastr.success(ret.msg);
//新增窗口并关闭原来的 ----- 也就是跳转
var that = top.window.$("ul.nav-addtabs li.active");
var oldId = that.find('a').attr('node-id')
Fast.api.addtabs(url, title, icon);
top.window.$("ul.nav-addtabs li#tab_" + oldId + " .close-tab").trigger("click");
}提示:这里的跳转方法不适用于 Fast默认的crud页面,fast默认的页面打开iframe然后关闭,是没有跳转操作的。
看了上面的操作,可能有朋友说,哎你这个代码每个要跳转的表单都要写一遍吗?懂不懂啥叫公用啊?1FpOVHA/Do8ik2P1cHuiqA==
下面就告诉大家如何封装,更简单的一行调用nGgZqJElewt2kyG8oqYAkA==首先找到 public/assets/js/backend-init.js 这个文件
默认这个文件是这样shen儿的define(['backend'], function (Backend) {
});你需要给他改成这样define(['backend', 'fast'], function (Backend, Fast) {
//添加Backend的扩展方法
$.extend(true, Backend, {
api: {
redirect: function(url, title, icon) {
var that = top.window.$("ul.nav-addtabs li.active");
var oldId = that.find('a').attr('node-id')
//新增窗口
Fast.api.addtabs(url, title, icon);
//关闭原来的
top.window.$("ul.nav-addtabs li#tab_" + oldId + " .close-tab").trigger("click");
},
}
});
}然后上面调用的代码就可以改成:Form.api.bindevent($("form[role=form]"), function(data, ret){
//如果我们需要在提交表单成功后做跳转,可以在此使用Fast.api.redirect("链接") 进行跳转
top.Toastr.success(ret.msg);
Fast.api.redirect(ret.url);
});PS:如果你的backend-init.js和默认的不一样 那说明你是个大佬啦,肯定能看懂我这个代码怎么改的,所以就不考虑backend-init.js不一样的情况了
PSS: 我不清楚backend-init.js修改之后 程序关闭debug模式之后是否需要重新打包哦~请各位大佬动动手查询一下吧~
上述方法只是我自己实践摸索出来的,可能大家都有自己的方法,如果有更方便更实用的方法,欢迎在评论区留言哦~jbZJI1j+EHwKYbzLW0aw8A==
下面是常用的跳转写法,可能会导致的问题我也写在下面了这里不是正文哦,可以不用看~~
1.错误示范: window.location.hrefF2AGmWi4KKHrqmEf/ejvfQ==Form.api.bindevent($("form[role=form]"), function(data, ret){
window.location.href = '链接'
}在fast的默认的页面中直接使用window.location.href,会出现 浏览器输入框内url和当前页面url不符,页面窗口名称不对等等各种问题
2.错误示范:parent.localion.hrefpt0TPv62+tzRIlyVAJSZCg==Form.api.bindevent($("form[role=form]"), function(data, ret){
parent.location.href = '链接'
}直接使用parent.location.href会让页面重新刷新。原来打开的tab消失,体验不是很好