avalonjs 中的if else实现的几种方法

在学习avalonjs的过程中,发现模板中并没有if else这样的写法,不像tempalte ejs这些,所以总结了三种方法来实现,仅供在使用avalonjs的同学参考,主要是通过ms-if 表达式和方法来实现.

1.开始前的准备

首先是做一个简单的html作为基础

<!DOCTYPE html>
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<script type="text/javascript" src="http://avalonjs.github.io/static/script/avalon.js"></script>
		<title>avalon的if else</title>
	</head>
	<body>
		<div ms-controller="test">

		</div>
	</body>
</html>

一些简单的样式

.text1{
	color: #f33;
}

.text2{
	color: #33f;
}

.text3{
	color: #3f3;
}

简单的avalonjs 例子初始化,其中的type就是我们要用来做判断的

var vm = avalon.define({
	$id: "test",
	type:1
});    

2.使用ms-if的方式

最直接的就是avalonjs的绑定ms-if,只是这里却没有ms-else这样的绑定,应该是处于dom的结构考虑,所以才没有这样的绑定器吧.那么实现的方法其实也很简单,两个ms-if就可以实现了,也就是写两个div,在不同的情况下做不同的显示即可,在html中就可以实现了.

<!DOCTYPE html>
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<script type="text/javascript" src="http://avalonjs.github.io/static/script/avalon.js"></script>
		<title>avalon的if else</title>
	</head>
	<body>
		<div ms-controller="test">
			<div class="text1" ms-if="type==0">if 的内容</div>
			<div class="text1" ms-if="type!=0">else 的内容</div>

		</div>
	</body>
</html>

3.使用表达式

mvvm的框架都会支持表达式的,avalonjs不例外,实现的方式就是在"{{}}"里面写入表达式进行判断,通过三元运算符来进行判断,现在回过头来想,avalonjs做得还是很强大的.既然是在"{{}}"里面写,那么在html就可以实现了.

<!DOCTYPE html>
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<script type="text/javascript" src="http://avalonjs.github.io/static/script/avalon.js"></script>
		<title>avalon的if else</title>
	</head>
	<body>
		<div ms-controller="test">
			<div class="text1" ms-if="type==0">if 的内容</div>
			<div class="text1" ms-if="type!=0">else 的内容</div>

			<div class="text2">
				{{type==0?‘if 的内容‘:‘else 的内容‘}}
			</div>
		</div>
	</body>
</html>

4.在模型中定义方法

一般的情况用前面两种方法应该都没有多大问题,如果是遇到一些复杂的判断,就需要这种方法了,就是在模型中自定义一个方法来处理,这个方法应该称为通用的方法吧,里面就有很多发挥的空间.

自定义一个方法来处理,问题就简单了很多,毕竟在js里面做判断还是很容易的事情的,比如if else \表达式\switch ,这些都可以用上,到时候只要return 内容回去就可以了,那么这个需要html和js来共同完成.

html的代码如下:

<!DOCTYPE html>
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<script type="text/javascript" src="http://avalonjs.github.io/static/script/avalon.js"></script>
		<title>avalon的if else</title>
	</head>
	<body>
		<div ms-controller="test">
			<div class="text1" ms-if="type==0">if 的内容</div>
			<div class="text1" ms-if="type!=0">else 的内容</div>

			<div class="text2">
				{{type==0?‘if 的内容‘:‘else 的内容‘}}
			</div>

			<div class="text3">
				{{toHtml(type)}}
			</div>
		</div>
	</body>

js的代码如下:

var vm = avalon.define({
	$id: "test",
	type:1,
	toHtml: function(type){
		if(type===0){
			return "if 的内容";
		}else{
			return "else 的内容";
		}
	}
});

5.结束语

像avalonjs这样的框架,有时候看起来限制了用法,其实换一个角度了看却是变得更加灵活了,上面介绍的方法希望能给学习avalonjs的同学一些启发和参考.

上面的例子,写在了runjs里面.本文同步发表在我的个人博客,http://www.subying.com/archives/144.html .

时间: 2024-10-25 12:17:41

avalonjs 中的if else实现的几种方法的相关文章

PHP中获取文件扩展名的N种方法

PHP中获取文件扩展名的N种方法 从网上收罗的,基本上就以下这几种方式: 第1种方法: function get_extension($file) { substr(strrchr($file, '.'), 1); } 第2种方法: function get_extension($file) { return substr($file, strrpos($file, '.')+1); } 第3种方法: function get_extension($file) { return end(expl

Node.JS的表单提交及OnceIO中接受GET/POST数据的三种方法

OnceIO 是 OnceDoc 企业私有内容(文档)管理系统的底层Web框架,它可以实现模板文件.静态文件的全缓存,运行起来完全不需要I/O操作,并且支持客户端缓存优化,GZIP压缩等(只压缩一次),拥有非常好的性能,为您节约服务器成本.它的模块化功能,可以让你的Web进行分布式存储,在一个扩展包里即可包含前端.后端和数据库定义,只需通过添加/删除目录的方式就可实现功能删减,实现真正的模块化扩展.目前 OnceIO 已经开源,本文主要介绍node.js语言中的表单提交及OnceIO中接受GET

js(20140517)在JS方法中返回多个值的三种方法

在JS方法中返回多个值的三种方法 在使用JS编程中,有时需要在一个方法返回两个个或两个以上的数据,用下面的几种方法都可以实现: 1 使用数组的方式,如下: <html> <head> <title>JS函数返回多个值--oec2003</title> </head> <body> <input type="button" onclick="getNames()" value="t

QT中获取选中的radioButton的两种方法(动态取得控件的objectName之后,对名字进行比较)

QT中获取选中的radioButton的两种方法 QT中要获取radioButton组中被选中的那个按钮,可以采用两种如下两种办法进行: 方法一:采用对象名称进行获取 代码: 1 QRadioButton* pbtn = qobject_cast<QRadioButton*>(ui->BG->checkedButton()); 2 QString name = pbtn->objectName(); 3 if(!QString::compare(name, "rad

VBS中解决路径带空格的三种方法

vbs中,如果需要运行的程序中带有空格,按照通常的方式往往会提示错误,其实有两种形式不同的解决方法: 在应用程序前后分别加三个双引号,代码如下: [c-sharp] view plaincopyprint? Set wshell=CreateObject("WScript.Shell") wshell.Run  """C:/Program Files/360/360se/360se.exe""",5,True Set wshe

在Java Web程序中使用监听器可以通过以下两种方法

之前学习了很多涉及servlet的内容,本小结我们说一下监听器,说起监听器,编过桌面程序和手机App的都不陌生,常见的套路都是拖一个控件,然后给它绑定一个监听器,即可以对该对象的事件进行监听以便发生响应,从本质上来说这些都是观察者模式的具体实现,在web程序中的监听器也不例外.在Java Web程序中使用监听器可以通过以下两种方法:通过注解@WebListener来标识一个自定义的监听器:[java] view plain copy@WebListener public class Custom

Java中取小数点后两位(四种方法)

摘自http://irobot.iteye.com/blog/285537 Java中取小数点后两位(四种方法) 一 Long是长整型,怎么有小数,是double吧     java.text.DecimalFormat   df=new   java.text.DecimalFormat("#.##");     double   d=3.14159;     System.out.println(df.format(d)); 二 java.math.BigDecimal     B

批处理文件中获取当前所在路径的几种方法

原文:批处理文件中获取当前所在路径的几种方法 @echo off setlocal EnableDelayedExpansion echo 当前正在运行的批处理文件所在路径:!cd! pause @echo off echo 当前目录是:%cd% pause @echo off :: set "abc=%cd%" echo 当前正在运行的批处理文件所在路径:%~dp0 pause @echo off echo 当前的盘符及路径:%~dp0 echo 当前的盘符及路径的短文件名格式:%~

SpringMVC中controller返回json数据的两种方法

SpringMVC中controller返回json数据的两种方法 1.jsp的ajax请求: function getJson(){ $.ajax({ type:"get", dataType:"json", url:"<%=basePath %>getJson", success:function(data){ for(var i=0;i<jsonData.length;i++){ alert("Id:"