`

Mustache模板遍历输出数据

    博客分类:
  • js
 
阅读更多

关于Mustache模板引擎的用法,大家可以看这里:http://www.fantxi.com/blog/archives/mustache-template/

或者各种百度google

 

这里说下自己实际用到的情况

首先页面定义好模板,关键循环遍历的是这个 {{#talentMedals}}标签下面的内容

<ul style="display:none;" id="hidePart_${map.key}"></ul>
<p class="pBtnMore"><a id="aChange_${map.key}" href="javascript:loadMoreTalents(${map.key})" class="aChange">加载更多</a></p>

<script id="tmpl1" type="text-x-mustache-tmpl">
	 <li>
	   <i class="iPic"><a href="{{link}}" target="_blank"><img src="{{img}}" width="85" height="85" /></a></i>
	   <i class="iTxt">
		 <span class="sTit"><a href="{{link}}">{{nickName}}</a><a href="" target="_blank" class="aKing" title="{{levelName}}">{{level}}</a></span>
		 <span class="sCon">
		 {{#talentMedals}}
		 <a href="" class="aCon{{no}}" title="{{medalName}}"></a>
		 {{/talentMedals}}
		</span>
	   </i>
	</li>
</script>

 页面触发的js方法:

function loadMoreTalents(medalId) {
		var pageNo = 2;
		var pageSize = 2;
		
		$.post("${ROOT}/talent/loadMoreTalents.do?medalId=" + medalId +"&pageNo=" + pageNo + "&pageSize=" + pageSize,"",function(data){
			alert(data.items);
			//n++;
			pageNo ++;
			var itemTmpl = $('#tmpl1').html();
			alert(itemTmpl);
			var res = [];
			$.each(data.items, function(i, item){
				res.push(Mustache.to_html(itemTmpl, item));
			});
			var savedCmt = $("#hidePart_" + medalId).html();
			alert("saveCmt:" + savedCmt);
			$("#hidePart_" + medalId).html(savedCmt + res.join(""));
			$("#hidePart_" + medalId).show();
			/* if ( pageNo >= 1) {
				$("#hidePart" + medalId).parent().hide();              
			} */
			
		},"json");
	}

后台服务器方法:

@RequestMapping(value="/talent/loadMoreTalents.do")
    public void loadMoreTalents(HttpServletRequest request, HttpServletResponse response) throws Exception {
    	long medalId = EnvUtils.getEnv().paramLong("medalId",0);
    	int pageNo = EnvUtils.getEnv().paramInt("pageNo",2);
    	int pageSize = EnvUtils.getEnv().paramInt("pageSize",3);
    	
    	List<Talent> talents = talentService.listTalentsByMedalId(pageNo, pageSize, medalId);
    	
    	JSONArray jsonArray = new JSONArray();
    	if(talents != null && !talents.isEmpty()) {
    		JSONObject json = null;
    		for(Talent talent : talents) {
    			json = new JSONObject();
    			long passportId = talent.getUser().getPassportId();
    			String userImgStr = T.face(passportId, "http://dev2.pclady.com.cn:9192/upchead/", "70x70");
    			json.put("link", "/users/otherUser.do?userId=" + talent.getUser().getUserId());
    			json.put("img", userImgStr);
    			json.put("nickName", talent.getUser().getNickName());
    			json.put("levelName", talent.getTalentLevel().getName());
    			json.put("level", talent.getTalentLevel().getLevel());
    			Map<Integer, Medal> map = talent.getMedals();
    			Iterator<Integer> it = map.keySet().iterator();
    			JSONArray medalArray = new JSONArray();
    			while(it.hasNext()) {
    				int id = it.next();
    				Medal medal = map.get(id);
    				JSONObject medalJson = null;
    				if(medal != null) {
    					medalJson = new JSONObject();
    					medalJson.put("no", id);
    					medalJson.put("medalName", medal.getName());
    					medalArray.add(medalJson);
    				}
    				
    			}
    			json.put("talentMedals", medalArray);
    			jsonArray.add(json);
    			
    		}
    	} 
    	
    	String str = "{\"items\":" + jsonArray.toJSONString()+"}";
    	System.out.println("------------items-----> " + str);
    	response.getWriter().println(str);
    }

 

可以看到,返回的结果是:

{"items":[{
	"img": "http://dev2.pclady.com.cn:9192/upchead//38/8/388_70x70",
	"level": 2,
	"levelName": "2级达人",
	"link": "/users/otherUser.do?userId=99",
	"nickName": "fish",
	"talentMedals": [{
		"medalName": "美容",
		"no": 1
	},
	{
		"medalName": "时尚",
		"no": 2
	}]
},
{
	"img": "http://dev2.pclady.com.cn:9192/upchead//90/3/903_70x70",
	"level": 2,
	"levelName": "2级达人",
	"link": "/users/otherUser.do?userId=100",
	"nickName": "handy",
	"talentMedals": [{
		"medalName": "彩妆",
		"no": 3
	},
	{
		"medalName": "点评",
		"no": 5
	}]
}]}

 

 

 

分享到:
评论
2 楼 u011670948 2017-09-25  
 
1 楼 u011670948 2017-09-25  
 

相关推荐

    Mustache: PHP实现的Mustache模板语言类库

    1. **双大括号语法**:在Mustache模板中,数据绑定通常通过`{{ }}`来完成。例如,`{{ variable }}`用于显示变量`variable`的值。如果变量不存在,则会忽略这段内容,避免出现错误。 2. **部分(Partials)**:部分...

    Mustache: PHP实现的Mustache模板语言类库.zip

    首先,让我们深入了解Mustache模板语言的基本概念。Mustache遵循一种“逻辑不可见”的原则,这意味着在模板中,所有的逻辑都是通过数据驱动的,而不是通过控制结构(如if/else)来表达。它使用双大括号`{{ }}`来表示...

    Go-mustache-Mustache模板语言的一个Go实现

    总的来说,Go-mustache提供了一个简洁、灵活的方式来生成动态内容,它结合了Mustache模板语言的特性与Go语言的强大性能。无论你是初学者还是经验丰富的开发者,都能快速上手并利用它来构建高效、可维护的模板驱动...

    stache:Mustache模板编译器

    - **变量**:`{{ variable }}`,用于输出数据对象中的值。 - **三元操作符**:`{{#condition}}trueValue}}{{/condition}}elseValue`,根据条件输出不同的值。 - **迭代**:`{{#array}}...{{/array}}`,遍历数组或...

    简单的前端模板引擎能实现最基本的数据渲染

    例如,Mustache和Handlebars是两个流行的JavaScript模板引擎,它们提供了丰富的语法结构,如`{{#if}}...{{/if}}`(条件判断)和`{{#each}}...{{/each}}`(循环遍历数组)。 总的来说,前端模板引擎是前端开发中不可...

    PyPI 官网下载 | pystache-0.4.1.tar.gz

    1. **逻辑less**:Mustache模板不包含任何条件判断或循环语句,这些逻辑需要在后端代码中处理,然后将结果传递给模板进行渲染。 2. **标签语法**:Mustache使用双大括号`{{ }}`来表示变量,三重大括号`{{{ }}}`用于...

    Laravel开发-laratash

    Mustache 是一种逻辑less的模板语言,强调数据驱动视图,使得开发者可以更加专注于数据的处理,而不用关心模板的渲染细节。Laratash 的出现,使得 Laravel 应用能够无缝地整合 Mustache 的优势。 **一、Laratash 的...

    mustache:髭模板的Haskell实现

    Mustache模板的核心概念是变量、段落、三重大括号、部分、逆运算符和循环。例如: - 变量:`{{name}}`,用于插入变量的值。 - 段落:`{{{name}}}`,用于输出未转义的值,常用于HTML元素。 - 三重大括号:`{{&...

    Hoganjs来自Twitter的JavaScript模板引擎

    Hogan.js是一个由Twitter开发的轻量级JavaScript模板引擎,它是对Mustache模板语言的实现。这个库的主要目的是为了提供一种高效且易于理解和使用的数据绑定和逻辑表达方式,用于生成HTML或其他格式的文本。在前端...

    mustache_test:只是测试 mustache.js 库

    变量用于输出数据,段落用于遍历数组或根据条件渲染内容,逆段落则用于在数据不存在时渲染内容。 4. **数据绑定**: 虽然 Mustache.js 不提供双向数据绑定,但可以与数据模型结合使用,通过更新数据源来自动更新视图...

    pystache-0.5.4.tar.gz

    Pystache,作为一款基于Mustache模板语言的Python实现,为开发者提供了强大而灵活的模板解析能力。Pystache-0.5.4是该库的一个版本,它包含了对Mustache规范的全面支持和优化,旨在简化数据绑定和渲染过程。 ...

    JavaScript模板引擎原理与用法详解.docx

    在Web开发中,它扮演着一个预处理器的角色,允许开发者编写类似于HTML的模板字符串,并在运行时结合数据生成最终的HTML输出。 模板引擎的基本原理是通过查找模板字符串中的特定标记或语法结构,如 `%` 或 `{{ }}`,...

    Mustache.ex:Elixir的Moustache模板

    Mustache是一种逻辑less的模板语言,它的设计理念是将数据和展示分离,使得模板尽可能保持中立,不包含任何业务逻辑。在Elixir中,Mustache.ex库实现了这个概念,为Elixir开发者提供了强大的视图渲染能力。 ### 1. ...

    js代码-面试题6:模板引擎的实现原理,实现变量的替换与数组的遍历

    在这个例子中,`renderTemplate`函数就是我们的模板引擎,它接收模板字符串和数据对象作为参数,然后进行变量替换和数组遍历。 在实际开发中,有许多成熟的JavaScript模板引擎库,如EJS、Handlebars、Mustache等,...

    mustache.github.com:{{official}}网站

    总的来说,Mustache.js 是一个简洁、强大且灵活的模板库,它鼓励编写无逻辑的模板,使数据和视图更加分离,有利于维护和协作。无论是在简单的静态网页还是复杂的前端应用中,它都是一个值得信赖的选择。通过深入学习...

    templateEngine.zip

    通过特定的语法,如占位符或表达式,模板引擎会将数据与模板结合,生成最终的HTML输出。 三、模板引擎的使用场景 1. 视图层的动态渲染:在MVVM(Model-View-ViewModel)框架如Vue.js中,模板引擎用于将数据模型转换...

    Claymore:简单的 Mustache 渲染框架

    Mustache 是一种逻辑less的模板语言,它的设计思想是保持模板和数据分离,让模板尽可能地无逻辑,从而让开发者更专注于内容的呈现。 **一、Mustache 模板语言** 1. **双大括号语法**:Mustache 使用 `{{ }}` 包裹...

    硬皮:{{Mustache}} for Crystal

    硬皮(Crustache)是专门为Crystal编程语言实现的一个模板引擎,它基于Mustache模板语言。Mustache是一种逻辑less的模板语言,强调无冲突的视图和模型分离,因此在多个编程环境中都有实现,包括JavaScript、Ruby、...

    前端开源库-blackbaud-stache

    - **变量**:使用双大括号 `{{variable}}` 表示变量,可以直接输出数据。 - **三重大括号** `{{{unescapedVariable}}}` 用于输出原始值,不进行HTML转义,适用于输出HTML片段。 - **条件语句**:`{{#condition}}....

    Vue 23 道面试题及答案.docx

    四、如何在模板中输出数据? 可以使用 Mustache 语法来输出数据。例如: Template:&lt;h1&gt;{{title}} App:new Vue({el:'#app',data:{title:'Vue. js'}}); 输出:;"&gt;Vue. js 五、如何实现双向数据绑定? 可以使用...

Global site tag (gtag.js) - Google Analytics