快捷搜索:

WPF/Silverlight深度解决方案:(十一)与嵌入式脚本语

本节,我首先想阐明一下为什么选择Lua和JavaScript,由于(1)文章标题写的是它们……汗一个先(2)它们都属于嵌入式脚本说话,主要办事于前端(客户端)。(3)说话方面有诸多相似,且在各自的专长领域都称得上“王者”。(4)体积小,Lua仅仅不到300K;而调用JavaScript更无需额外的资本引用。

因为是嵌入式脚本,是以它们在客户前端可以体现得极其机动。经由过程将设置设置设备摆设摆设参数及实现详细功能的措施逻辑抽离到脚本中,在改动及拓展时就能加倍方便更新处置惩罚而无需从新编译主体框架代码。而诸如XML、JSON、Protocol Buffers等数据互换款式仅能作为数据存储序言,自身无法实现逻辑处置惩罚。至于其它能被.NET所支持的脚本例如IronPython等,则平日致力于办事器端,阔别嵌入式精神。

言归正传,大年夜家是否已从上一节中感想熏染到了WPF与Lua交互的机动性,那么本节我将向大年夜家解说Silverlight与JavaScript的交互。着实这个话题早就被写烂了,网上可以寻获一大年夜堆资料,为何要再次解说?一方面盼望为大年夜家用更简洁直不雅的要领浓缩英华,更紧张的是经由过程实现上一节同样的效果,使大年夜家能进一步的理解Lua和JavaScript,以及它们之间的差别。

同样的,按照上一节的流程,我们先写出对应的JavaScript脚本:

script type="text/javascript">

var content = new Array (

"据说你老婆生了波|啊?真的?|真的假的哇?|你们据说没,深蓝色右手近来和施瓦辛格筹备合拍下一部作品,似乎要取名叫:'断肩山'|…… ",

"握着老婆的手,好象左手握右手;握着蜜斯的手,好象回到十八九;握着女同砚的手,忏悔当初没下手。|……",

"前清时期坐鞠问|北洋军中扛过枪|武昌城里落过荒|北伐战斗帮过忙|......"

);

function ShowTalk(i){

var list = content[i].split("|");

var obj = document.getElementById("SL").content.SL_Obj;

obj.RandomTalk(list[Math.floor(Math.random() * list.length)]);

}

script>

大年夜家不妨对比下上节中的Lua脚本必然会发明它们真的很像。在JavaScript脚本中,我们经由过程document.getElementById("SL").content.SL_Obj这一句来获取

object id="SL" data="data:application/x-silverlight-2,"……>object>

id为SL的Silverlight页面控件工具,此中的SL_Obj这个名字必须在Silverlight后台cs中注册:

HtmlPage.RegisterScriptableObject("SL_Obj", this);

才能被正常引用。这样,我们就可以调用Silverlight中的RandomTalk措施了:

obj.RandomTalk(list[Math.floor(Math.random() * list.length)]);

同时,Silverlight中的RandomTalk还必须添加[ScriptableMember]标识用以奉告系统此措施可以被JavaScript调用:

[ScriptableMember]

public void RandomTalk(string content) {

int i = random.Next(sprite.Count());

sprite[i].Talk = content;

Canvas.SetZIndex(sprite[i], 1);

}

由此就完成了JavaScript将逻辑处置惩罚结果返回给Silverlight的流程。

反过来,Silverlight后台中的cs文件该若何调用此JavaScript脚本中的ShowTalk措施呢?和Lua一样,一句话搞定:

HtmlPage.Window.Invoke("ShowTalk", Convert.ToInt32((comboBox1.SelectedItem as ComboBoxItem).Tag));

假如说Lua很陌生,那么作为.NET开拓者的我们,对付JavaScript应该再认识不过了。拥有这样好的先天前提,将JavaScript作为Silverlight的强力帮助对象,Silverlight的客户端体验将加倍强大年夜与完美。这才是本节想表达的终纵目的。

同样的,着末放一个在线Demo(下载源码):

在线Demo

JavaScript 虽然不像Lua那样可以实现完备的函数性编程,然则它在Web前端体现出来的强大年夜是无可否认的,额外的它着实早已被利用到了Web领域之外,默默的,为了Silverlight的加倍强大年夜而奉献着。

转自:http://www.cnblogs.com/alamiye010/archive/2009/10/03/1577740.html

您可能还会对下面的文章感兴趣: