mobilemode.api.refresh_wev8.js 7.11 KB
define("mApi/refresh", ["mobilebone", "mUtil", "Component", "pageStack"], function(Mobilebone, mUtil, Component, stack) {
	var _listCompArr = ["List", "UrlList", "LargeList", "NLargeList", "HoriList", "NHoriList", "APIList", "Timelinr", "NTimeline", "GridTable", "NGridTable", "UrlGridTable", "RSSList", "NList"];
	var _getPageIdByCompId = function (compId) {
		var selector = "[id='" + compId + "']";
		var comps = document.querySelectorAll(selector);
		var _getPageid = function ($el, pageid) {
			var $tabpanel = $el.closest(".tabpanel");

			return $tabpanel.length ? $tabpanel[0].id : pageid;
		};

		// 插件唯一
		if (comps.length === 1) {
			return $(comps[0]).closest("." + Mobilebone.classPage).attr("id");
		}

		// 插件在当前页
		var currpageid = mUtil.getCurrentPageId();
		var $ele = $(selector, $("#" + currpageid));

		if ($ele.length) {
			return _getPageid($ele, currpageid);
		}

		// 插件在前几页 往前遍历
		var pages = stack.getAllPrevPages(), pageid;

		pages.reverse().every(function (page) {
			var $el = $(selector, $("#" + page.id));
			
			if (!$el.length) return true;

			pageid = _getPageid($el, page.id);
		});

		return pageid;
	};
	
	return {
		refresh: function(pageIntId, pageParam, callback){
			var mobilemode = require("mobilemode");
			var pageId = pageIntId ? mUtil.getPageId(pageIntId) : mUtil.getCurrentPageId();
			var page = document.getElementById(pageId);

			if (!page) return;

			if (mUtil.isFunction(pageParam)) {
				callback = pageParam;
				pageParam = {};
			}

			var formdata = mUtil.getPageParam(pageId);

			pageParam = $.extend({}, formdata, pageParam);
			pageParam = Object.keys(pageParam).map(function (k, i) {
				return k + "=" + pageParam[k];
			}).join("&");
			mobilemode.pageInit(page, null, { formdata: pageParam, isrefresh: true, onPageLoad: callback });
        },
		refreshList: function(id, params, callback){
			var pageid = _getPageIdByCompId(id);
			var $page = $("#"+pageid), $el = $page.find("[id='"+id+"']");
			if (mUtil.isFunction(params)) {
				callback = params;
				params = "";
			}
			var paramObj = mUtil.strToParamJSON(params);
			if($el.attr("data-loaded") == "false"){
				return this.triggerRefresh(id, paramObj, callback);
			}
			var comp = Component.getInstance(id, pageid);
        	if(!comp){
        		return mUtil.console.error("未找到指定id的列表插件:"+id+"");
			}
        	comp.reload(paramObj, callback);
        },
        refreshPrevPageList: function(id, params, callback){
			var prevPage = stack.getPrevPage();
			
			if(!prevPage) return;

			var prevPageId = prevPage.id;
			var _refresh = function (listId) {
				var comp = Component.getInstance(listId, prevPageId);

				if (comp && mUtil.isFunction(comp.reload)) {
					comp.reload(mUtil.strToParamJSON(params), callback);
				}
			};

			if (!id) {
				var $prevPage = $(prevPage), expr = "";
				_listCompArr.forEach(function (e) {
					if (expr) expr += ",";
					expr += "abbr[data-type='" + e + "']";
				});

				$prevPage.find(expr).each(function () {
					_refresh(this.id);
				});
				return;
			} 

			if (mUtil.isFunction(params)) {
				callback = params;
				params = "";
			}

			_refresh(id);
        },
        refreshSpecifiedList: function(pageid, id, params, callback){
        	mUtil.isFunction(id) && (callback = id, id = "", params = "");
        	mUtil.isFunction(params) && (callback = params, params = "");
        	
        	if(pageid.indexOf(".") != -1){
        		pageid = pageid.replace(".", "_");
        	}
        	pageid = mUtil.getPageId(pageid);
        	
        	if(!id){
        		var $page = $("#"+pageid);
				if($page.length == 0){
					mUtil.console.error("未找到id为" + pageid + "的页面,请检查参数设置是否正确");
					return;
				}
				var expr = "";
				_listCompArr.forEach(function(e){
					if(expr) expr += ",";
					expr += "abbr[data-type='"+e+"']";
				});
				var $comp = $page.find(expr)[0];
				$comp && (id = $comp.id);
				if(!id){
					mUtil.console.error("在id为" + pageid + "的页面未找到列表组件,请检查参数设置是否正确");
					return;
				}
        	}
        	
        	var comp = Component.getInstance(id, pageid);
        	if(!comp){
        		mUtil.console.error("在页面"+pageid+"中未找到指定id的列表插件:"+id+"");
        		return;
        	}
        	var paramObj = mUtil.strToParamJSON(params);
        	comp.reload(paramObj, callback);
        },
		triggerRefresh: function (id, params, callback) {
			var pageid = _getPageIdByCompId(id);
			var $page = $("#" + pageid), $el = $page.find("[id='" + id + "']");

			if (!$el.length) return;

			$el.data("loaded", false).html("");

			if (mUtil.isFunction(params)) {
				callback = params;
				params = {};
			}

			var currPageParam = mUtil.getCurrPageParam();
			var type = $el.attr("data-type");

			$.extend(currPageParam, params);
			$.when(mUtil.getComponentOpt(id, pageid), mUtil.getComponent(type))
				.then(function (option, Component) {
					var comp = new Component({ el: id, type: type, option: option, container: $page, pageid: pageid });

					comp.render().then(function () {
                        comp.$el.data("loaded", true);

						try {
							callback && callback(id);
						} catch (e) {
							console.error(e);
						}
					});
				});
		},
        triggerLazyLoad: function(id, params, callback){
			var pageid = _getPageIdByCompId(id);
        	var $page = $("#"+pageid), $el = $page.find("[id='"+id+"']");
        	var lazyload = $el.data("lazyload");
        	var loaded = $el.data("loaded");
        	if(lazyload == true && loaded !== true){
            	this.triggerRefresh(id, params, callback);
        	}
        },
        refreshRemind: function(pageid, compid){
        	if(typeof(pageid) == "undefined"){
        		pageid = mUtil.getCurrentPageId();
        	}else if(pageid.length == 32){
        		compid = pageid;
        		pageid = _getPageIdByCompId(compid);
        	}else{
        		pageid = mUtil.getPageId(pageid);
        	}
        	var compidArr = [];
        	if(compid){
        		compidArr.push(compid);
        	}else{
        		var $page = $("#" + pageid);
        		var $pageHeader = $page.children(".page-header");
    			var $pageContent = $page.children(".page-content");
    			var $pageFooter = $page.children(".page-footer");
        		$(
    				$pageHeader.find(".wev-badge").concat(
    						
    				$pageContent.children(".page-scroller").find(".wev-badge"),
    				
    				$pageFooter.find(".wev-badge"))
    				
    			).each(function(){
    				var $abbr = $(this).closest("abbr");
    				var id = $abbr.attr("id");
    				if(compidArr.toString().indexOf(id) == -1){
    					compidArr.push(id);
    				}
    			});
        	}
        	$.each(compidArr, function(i, v){
    			var comp = Component.getInstance(v, pageid);
    			try{
    				comp.refreshBadge();
    			}catch(e){
    				mUtil.console.error(e);
    			}
    		});
        },
		refreshCalendar:function (mecId, date, callback) {
			var pageId = _getPageIdByCompId(mecId);
			var comp = Component.getInstance(mecId,pageId);
			if(!comp){
				return mUtil.console.error("未找到指定id的日历插件:" + mecId);
			}
			comp.reload(date,pageId,callback);
		}
	};
});