您好,欢迎访问一九零五行业门户网

如何用js 实现依赖注入

大家在做些页面的时候,很多都是用ajax实现的,在显示的时候有很多表单提交的add或者update操作,显然这样很烦,突然想到了一个比较好的方法,下面给大家分享下如何用js 实现依赖注入的思想,后端框架思想搬到前端来。
应用场景: 前后端一一对应、表单内容保存、列表陈述等。
架构思路: 分发器、依赖注入等。
基本代码陈述:
j.extend({ dispatcher: (function () { var _route = {}, // default module _module = { // 授权 authenticate: true, // 验证 validation: true, // 数据转换 datatransform: true, }, _state = { error: function () { } }, _ajax = function () { j.ajax(this) } ; function _container() { // initializer. return _route; } function _configuration(config, _tmp_route) { if (config) { config.module && (_module = $.extend(_module, config.module)) config.state && (_state = $.extend(_state, config.state)) config.post && config.post.querystring && (function () { if (!/^?/.test(config.post.querystring)) { _tmp_route += "?"; } _tmp_route += config.post.querystring; })() config.list && (function () { config.list = $.extend({ pagesize: 15, wrapped: $("#list-container"), searchform: $("#form-post"), searchbutton: $("#search-button"), post: {} }, config.list); })() } return _tmp_route; } return { ajax: new _container(), intercept: { module: function (module) { $.extend(true, _module, module); }, route: function (route) { if (!$.isemptyobject(_route)) return; $.extend(true, _route, route); for (var i in _route) { if (_route.hasownproperty(i)) { var _controller = _route[i]; for (var k in _controller) { if (_controller.hasownproperty(k) && j.utils.isfunction(_controller[k])) { (function () { var clone = j.clone(_controller[k]), _tmp_route = "/" + i + "/" + k; _controller[k] = function (config) { var url = _configuration(config, _tmp_route); if (j.utils.isfunction(clone)) { clone.apply(_module, config); } // todo modules if (!(_module.authenticate && j.utils.isfunction(_module.authenticate)) && _module.authenticate() || _module.authenticate === true) { console.log("j.ajax." + i + "." + k + " authenticate failed."); config.state.error(); return false; } if (config.validation) { _module.validation.init(config.validation); config.validation.firetarget.on("click", function () { if (!_module.validation || !config.validation.formtarget.valid()) return false; var data = _module.datatransform(!config.post.data ? config.validation.formtarget.serializejson() : config.post.data) var ajax_data = { url: url, data: data, firetarget: config.validation.firetarget } ajax_data = $.extend(ajax_data, config.post); _ajax.call(ajax_data); return false; }) } if (config.list) { if (!$.fn.pagination) { throw new error("j.dispatcher.intercept.list need jquery.pagination,please load jquery.pagination before this file.") } config.list.onchange = function (pageindex) { var $this = this; this.showloading(); var formdata = config.list.searchform.serializejson(); formdata.pageindex = pageindex; formdata.pagesize = $this.pagesize; var data = _module.datatransform(!config.list.post.data ? formdata : config.list.post.data) var ajax_data = { url: url, data: data, } $.extend(true, ajax_data, config.list.post); ajax_data.success = function () { $this.generatedata(this.totalrecords, this.list); } j.jsonp(ajax_data) } j.list.table(config.list); config.list.searchbutton.on("click", function () { config.list.wrapped.empty(); j.list.table(config.list); }) } } }()) } } } } } } } })() }) var global = { datatransform: { "default": function () { if (typeof (arguments[0]) == "object" && object.prototype.tostring.call(arguments[0]).tolowercase() == "[object object]" && !arguments[0].length) { return j.json.tokeyvalstring(arguments[0],true); } else if (j.utils.isstring(arguments[0])) { return arguments[0]; } else { return {}; } }, "objectdata": function () { if (typeof (arguments[0]) == "object" && object.prototype.tostring.call(arguments[0]).tolowercase() == "[object object]" && !arguments[0].length) { return { data: j.json.tostring(arguments[0]) } } else if (j.utils.isstring(arguments[0])) { return arguments[0]; } else { return {}; } } } } j.dispatcher.intercept.module({ authenticate: function () { }, validation: (function () { var hascongfig = false; function _config() { if (!$.fn.validate) { throw new error("j.dispatcher.intercept.module.validation need jquery.validate,please load jquery.validate before this file.") } jquery.validator.addmethod("ispassword", function (value, element) { return j.config.reg_phone.test(value); }, "请输入6-20密码建议由数字、字母和符号组成!"); jquery.validator.addmethod("ismobile", function (value, element) { return j.config.reg_phone.test(value); }, "请正确填写您的手机号码"); jquery.validator.addmethod("iseamil", function (value, element) { return j.config.reg_email.test(value); }, "请填写正确的邮箱地址"); jquery.validator.addmethod("isusername", function (value, element) { return j.config.reg_login_name.test(value); }, "4-32位字符.支持汉字、字母、数字"-""_"组合"); } function _getrequired(parms, filters) { if (parms instanceof jquery && parms.length > 0 && parms[0].tagname == "form") { var config = {}; parms.find("[name]").each(function () { if (!filters || filters.indexof(this.name) == -1) { config[this.name] = { required: true }; } }) return config; } else { for (var i in parms) { if (parms[i]) { parms[i]["required"] = true; } else { parms[i] = { required: true }; } } return parms; } } function _getmessage(parms, filters) { if (parms instanceof jquery && parms.length > 0 && parms[0].tagname == "form") { var config = {}; parms.find("[name]").each(function () { if (!filters || filters.indexof(this.name) == -1) { config[this.name] = { required: $(this).attr("data-required-message") }; } }) return config; } } function _init(config) { if (!hascongfig) { hascongfig = true; _config(); } !config.formtarget && $("#form-post").length > 0 && (config.formtarget = $("#form-post")) !config.firetarget && $("#post-button").length > 0 && (config.firetarget = $("#post-button")) if (!(config.firetarget && config.firetarget instanceof jquery && config.firetarget[0].type.touppercase() == "submit")) throw new error("j.validator.init needs config.submittarget param, its type is submit"); if (!(config.formtarget && config.formtarget instanceof jquery && config.formtarget[0].tagname == "form")) throw new error("j.validator.init needs config.formtarget param, its type is form"); var rules = _getrequired(config.formtarget, config.filters), messages = _getmessage(config.formtarget, config.filters); config.rulescallback && config.rulescallback(rules); config.messagescallback && config.messagescallback(messages); config.formtarget.validate({ debug: true, rules: rules, messages: messages }); } return { init: function (config) { _init(config); }, validate: function () { return config.formtarget.valid(); } } })(), datatransform: global.datatransform.objectdata }) j.dispatcher.intercept.route({ passport: { signin: function () { this.datatransform = global.datatransform.default; }, signout: function () { }, reg: function () { }, cpwd: function () { this.datatransf
以上就是如何用js 实现依赖注入的详细内容。
其它类似信息

推荐信息