RSSList_wev8.js 5.33 KB
define(['mUtil', "Component", "wev-loading"], function (mUtil, Component, WevLoading) {
	var comp = function(options) {
        
		Component.super(this, options);
		
		var dynamicParam = {};
		
		this.type = "RSSList";
		this.tpl = this.type + "_html";
        this.dataload = true;
		this.components = {
			loading: new WevLoading({
				delay: 300,
				animation: 1
			}),
		};

		var vm = this.viewModel = {
			source: "",
			size: -1,
			readonly: false,
			showset: {
				imgfield: "",
                titlefield: "{title}",
                otherfields: [
                    "{description}"
                ]
            },
			onload: function() {}
		};
		
		this.mounted = function(){
			var that = this;

			_list.refreshList(function(){
				mUtil.eval(vm.onload, that.pageid);
                mUtil.trigger('dataload', that.pageid, that.id);
			});
		};
		
		this.reload = function(args, callback){
			if(mUtil.isObject(args)){
				$.extend(dynamicParam, args);
			}
			_list.refreshList(callback);
		};
		
		var listTimestamp = 0;
		
		var _list = {
			
			refreshList: function (callback) {
				if (!vm.source) {
					var $list = $(".wev-table-view",this.$el);
					mUtil.getLabel(5295, "未配置订阅源",function(msg){
						$list.html("<div class=\"wev-message error\">"+msg+"</div>");
					});
					return;
				}

				var loading = this.components.loading;

				loading.setRefs(this.$comp, "wev-refreshing");
				loading.show();

				_list.loadData(function () {
					loading.hide();
					if (mUtil.isFunction(callback)) {
						callback.call(null);
					}
				});
			},
			
			loadData: function(callback){
				var that = this,
					$abbr = that.$el,
					$list = $(".wev-table-view", $abbr);
				
				var timestamp = (new Date()).valueOf();    //时间戳
	            listTimestamp = timestamp;
	            
	            var $noData = $(".wev-no-data", that.$el);
	            $noData.hide();

				var url = mUtil.getActionUrl(this.type, {action:"getItemsWithJSON", "url":mUtil.compressByLZ(vm.source), "size":vm.size}, this.pageid);
				mUtil.getJSON(url, dynamicParam, function(result){  
					if(timestamp != listTimestamp){
	                    return;
	                }
					
				    var jsonDatas = result.items;
	                var showset = vm.showset;
	                
	                var rd = {};
	                
	                rd["datas"] = getShowDatas(jsonDatas, showset.imgfield, showset.titlefield, showset.otherfields);
	                
	                var templateHtml = [
	                    '{@each datas as d}',
	                        '<li class="wev-table-view-cell wev-media">',
	                              '<a class="wev-navigate-right{@if d.readonly} wev-data-readonly"{@else}" data-ignoreviewimg{@/if} href="$${d.dataurl}" data-ajax="false" data-reload="true">',
	                                  '<div class="wev-media-object wev-pull-left">',
	                                      '$${d.imgFieldValue}',
	                                  '</div>',
	                                  '<div class="wev-media-body">',
	                                      '$${d.titleFieldValue}',
	                                      '{@each d.otherFieldValue as row}',
	                                          '<div class="wev-ellipsis">',
	                                          	'$${row}',
	                                          '</div>',
	                                      '{@/each}',
	                                  '</div>',
	                              '</a>',
	                        '</li>',
	                    '{@/each}'    
	                ].join('');
	                
	                var html = mUtil.parseTemplate(templateHtml, rd);
	                $list.html(html);
	                
	                if(typeof(callback) == "function"){
	                	callback.call(this);
	                }
				}, function(errMsg){
					mUtil.getLabel(5283, "解析订阅源时出现异常,请检查订阅源是否正确",function(msg){
						$list.html("<div class=\"wev-message error\">" + msg + "</div>");
					});
					
					if(mUtil.isFunction(callback)){
	                	callback.call(this);
	                }
				}); 
			}
		};
		
		function getShowDatas(jsonDatas, imgfield, titlefield, otherfields){
			var datas = [];
			for(var i = 0; i < jsonDatas.length; i++){
            	var d = {};
            	var jsonData = jsonDatas[i];
				var dataurl = "javascript:void(0);";
				
            	if(!vm.readonly){
					dataurl = jsonData.link;
				}
				
            	d.dataurl = dataurl;
            	//图片
            	d.imgFieldValue = replaceVal(imgfield, jsonData);
            	//标题
            	d.titleFieldValue = replaceVal(titlefield, jsonData);
				
				var otherFieldValue = [];

				otherfields.forEach(function(rowfields) {
					var rowFieldValue = replaceVal(rowfields, jsonData);

					if(rowFieldValue.length) {
						otherFieldValue.push(rowFieldValue);
					}
				});

				d.otherFieldValue = otherFieldValue;
				d.readonly = vm.readonly;
				datas.push(d);
            }
			return datas;
		}
		
		function replaceVal(str, jsonData) {
        	for(var key in jsonData){
        		var reger = new RegExp("{"+key+"}","g");
        		str = str.replace(reger, jsonData[key]);
			}
        	return str;
		}
		
		_list.refreshList = _list.refreshList.bind(this);
		_list.loadData = _list.loadData.bind(this);
    };

    return Component.init(comp);
});