Visual Studio 2013 中的 LightSwitch 有新增功能,包括更好的团队开发支持以及在构建 HTML 客户端桌面和 Office 365 应用程序方面的改进。本文结合最新发布的Wijmo 5提供的AngularJs进行图解。

基于Visual Studio LightSwitch作为数据源,我们使用Wijmo 5控件快速的创建 AngularJS应用程序。

插入数据记录

业务规则校验

数据记录更新

选择数据记录,点击键盘上删除按键

点击列头,进行数据排序

并发性校验(由LightSwitch的后端提供)。

Wijmo 5控件集

2014年10月7日---葡萄城宣布正式发布Wijmo 5。Wijmo 5不再兼容传统浏览器(<= IE9),纯HTML5控件集。并且,发布并Wijmo 5全部的控件中将全面支持Angular JS。

为何使用Wijmo 5和LightSwitch?

  • 为了100%控制UI:LightSwitch HTML Client基于JQuery Mobile,这导致为了控制UI不得不花费大量时间。
  • 为了实现安全性:安全策略一般在Server端实现。无法通过AngularJs前端技术实现。LightSwitch使得安全性非常容易实现。
  • 为了处理并发性:当多人同时更新DB会导致并发性,所幸,LightSwitch已经自动实现该特性。
  • 为了用LightSwitch进行管理界面代码:基于LightSwitch,我们无需用AngularJs实现管理界面代码,LightSwitch已经实现了,故结合LightSwitch和AngularJs使得编程非常容易。
  • 为了加快开发:当前使用LightSwitch,可以大大减少代码编写,这意味着开发进程会加速,bug会减少。

例子如下所示:

LightSwitch 业务层

在解决方案视图,在数据源DataSources右键,选择Add Table

创建ToDo表

点击写代码按钮,选择Validate方法,在生成的模板中,插入验证代码。

partial void ToDoes_Validate(ToDo entity, EntitySetValidationResultsBuilder results)
{
// Do not allow a task to be called {New Task]
if (entity.TaskName == "[New Task]")
{
results.AddEntityError(
"Task cannot be named [New Task]"
);
} // Do not allow more than 1 incomplete Task
if (entity.IsComplete == false)
{
int intCountOfIncomplete =
this.DataWorkspace.ApplicationData.ToDoes
.Where(x => x.IsComplete == false)
.Where(x => x.Id != entity.Id).Count(); if (intCountOfIncomplete > )
{
results.AddEntityError(
"Cannot have more than 1 incomplete Task"
);
}
}
}

Wijmo 5代码

Wijmo 5下载地址:输入邮箱即可获得下载URL地址

解压Wijmo样例,定位到“..\Samples\JS\Angular\OData”目录,拷贝Vendor和styles文件夹到LightSwitch Server工程的Scripts文件夹。

创建wijmo.data文件夹,下载ODataCollectionView.js,并拷贝在wijmo.data文件夹下。

AngularJs代码

在scripts文件夹下创建app.js脚本文件,并输入如下代码。

// 在AngularJS 声明依赖 Wijmo "wj" module:
var app = angular.module('app', ['wj']);

在scripts文件夹下创建controllers文件夹,并创建appCtrl.js,并输入如下代码。

'use strict';

var app = angular.module('app');

app.controller('appToDoCtrl', function appToDoCtrl($scope) {

    // define data service URL and data types for specific columns
var oDataService = '/ApplicationData.svc', dataTypes = []; // load ToDos table
$scope.cvToDo = new wijmo.data.ODataCollectionView(
{ serviceUrl: oDataService, entityName: 'ToDoes' },
['Id'],
{
serverSettings: {
selects: ['Id', 'RowVersion', 'TaskName',
'IsComplete', 'Created', 'Modified']
}
},
dataTypes, loaded, true); // Display any errors
$scope.cvToDo.error.addHandler(function (sender, args) {
alert(sender.errorMsg);
}); // tell scope when tables finish loading
function loaded() {
$scope.$apply();
}
});

创建HTML页面

创建ToDo.htm页面,并输入如下代码:

<!DOCTYPE html>
<html lang="en" ng-app="app" ng-controller="appToDoCtrl">
<head>
<meta charset="utf-8" />
<title>To DO</title>
<!-- ensure IE uses the latest version of IE (yes, yes...) -->
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <!-- jQuery/Angular/Bootstrap -->
<script src="http://code.jquery.com/jquery-2.0.0.min.js"
type="text/javascript"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.19/angular.min.js"
type="text/javascript"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.19/angular-route.min.js"
type="text/javascript"></script>
<script src="https://netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"
type="text/javascript"></script>
<link rel="stylesheet" href="https://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css"
type="text/css" /> <!-- Wijmo -->
<script src="scripts/vendor/wijmo.min.js" type="text/javascript"></script>
<script src="scripts/vendor/wijmo.input.min.js" type="text/javascript"></script>
<script src="scripts/vendor/wijmo.grid.min.js" type="text/javascript"></script>
<link href="styles/vendor/wijmo.min.css" rel="stylesheet" /> <!-- app scripts -->
<script src="scripts/wijmo.data/ODataCollectionView.js" type="text/javascript"></script>
<script src="scripts/app.js" type="text/javascript"></script>
<script src="scripts/controllers/appCtrl.js" type="text/javascript"></script> <!-- Wijmo-Angular interop -->
<script src="scripts/vendor/wijmo.angular.min.js" type="text/javascript"></script> <!-- app styles -->
<link href="styles/app.css" rel="stylesheet" type="text/css" />
</head> <body>
<div class="header">
<div class="container" style="position:relative">
<h1>
TO DO Example
</h1>
</div>
</div>
</body>
</html>

在<body>内添加Wijmo Grid代码:

<div class="container">
<wj-flex-grid class="grid"
allow-add-new="true"
allow-delete="true"
items-source="cvToDo">
<wj-flex-grid-column
binding="TaskName"
width="300"
header="Task Name">
</wj-flex-grid-column>
<wj-flex-grid-column
binding="IsComplete"
datatype="Boolean"
width="200"
header="IsComplete">
</wj-flex-grid-column>
</wj-flex-grid>
</div>

参考文章:

图解AngularJS Wijmo5和LightSwitch的更多相关文章

  1. AngularJS开发下一代Web应用笔记(一)

    一.写在最前 AngularJS是Google推出的一款Web应用开发框架.它提供了一系列兼容性良好并且可扩展的服务,包括数据绑定.DOM操作.MVC设计模式和模块加载等. 现在网上JS框架茫茫多,真 ...

  2. AngularJS初始(一)

    什么是AngularJs? angularjs是一个为动态WEB应用设计的结构框架.它能让你使用HTML作为模板语言,通过扩展HTML的语法,让你能更清楚.简洁地构建你的应用组件.它的创新点在于,利用 ...

  3. 全新Wijmo5中文学习指南正式上线

    Wijmo 是一款使用 TypeScript 编写的新一代 JavaScript/HTML5 控件集.它秉承触控优先的设计理念,在全球率先支持 AngularJS,并且支持React.VueJS以及T ...

  4. 图解 Spring:HTTP 请求的处理流程与机制【4】

    4. HTTP 请求在 Spring 框架中的处理流程 在穿越了 Web 容器和 Web 应用之后,HTTP 请求将被投送到 Spring 框架,我们继续剖析后续流程.Web 应用与 Spring M ...

  5. 通过AngularJS实现前端与后台的数据对接(二)——服务(service,$http)篇

    什么是服务? 服务提供了一种能在应用的整个生命周期内保持数据的方法,它能够在控制器之间进行通信,并且能保证数据的一致性. 服务是一个单例对象,在每个应用中只会被实例化一次(被$injector实例化) ...

  6. AngularJs之九(ending......)

    今天继续angularJs,但也是最后一篇关于它的了,基础部分差不多也就这些,后续有机会再写它的提升部分. 今天要写的也是一个基础的选择列表: 一:使用ng-options,数组进行循环. <d ...

  7. AngularJS过滤器filter-保留小数,小数点-$filter

    AngularJS      保留小数 默认是保留3位 固定的套路是 {{deom | number:4}} 意思就是保留小数点 的后四位 在渲染页面的时候 加入这儿个代码 用来精确浮点数,指定小数点 ...

  8. Angular企业级开发(1)-AngularJS简介

    AngularJS介绍 AngularJS是一个功能完善的JavaScript前端框架,同时是基于MVC(Model-View-Controller理念的框架,使用它能够高效的开发桌面web app和 ...

  9. 模拟AngularJS之依赖注入

    一.概述 AngularJS有一经典之处就是依赖注入,对于什么是依赖注入,熟悉spring的同学应该都非常了解了,但,对于前端而言,还是比较新颖的. 依赖注入,简而言之,就是解除硬编码,达到解偶的目的 ...

随机推荐

  1. python 注册

    1.打开网址,点击 获得注册码 http://idea.qinxi1992.cn/  2.help -- register 第二步: http://jetbrains.tencent.click/   ...

  2. Ubuntu修改hosts方法

    1.修改hostssudo gedit /etc/hosts如果不喜欢使用gedit命令,而且当前帐户为非root帐户,那么可把/etc/hosts复制到桌面上,然后手动编辑后保存,再使用命令copy ...

  3. Python-类的继承

    类的继承 面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制.继承完全可以理解成类之间的类型和子类型关系. 需要注意的地方:继承语法 class 派生类名(基类名):/ ...

  4. MySQL高可用方案选型参考

    http://imysql.com/2015/09/14/solutions-of-mysql-ha.shtml#rd?sukey=b0cb5c5b9e501303123bd48e86555c35e0 ...

  5. 浅析Android中ndk-build支持的参数

    在解决Android Studio中编译native code出现的问题时,发现Android Studio使用了完整的ndk-build命令进行编译,参数众多.故在此做一个说明,以便大家可以根据偏好 ...

  6. Oracle 10g -- 修改DB的编码

    修改DB的原因是:因为我的DB不支持中文,所以每当我向数据库表中插入一条数据的时候,中文就都变了类似于“?(是反问号)”的乱码,为了能顺利插入成功,故做了此次修改; 系统:windows XP 英文版 ...

  7. No module named yum错误的解决办法

    今天用yum安装软件的时候出现如下错误: There was a problem importing one of the Python modules required to run yum. Th ...

  8. jsp学习--JavaBean定义和在Jsp中使用JavaBean

    一.JavaBean 1.什么是JavaBean JavaBean是一个遵循特定写法的Java类,它通常具有如下特点:>>这个Java类必须具有一个无参的构造函数>>属性必须私 ...

  9. Ubuntu遇到Please ensure that adb is correctly located at '...adb.exe' and can be executed 问题解决方法

    上次我们在SDK更新的到最新的Android L版本之后,我发现我的ADT和android指定的版本不对应,我的ADT是22版本的,android L需要23版本以上的,版本不对应的话就无法加载这个S ...

  10. 使用 IntraWeb (42) - 测试读取 SqLite (一)

    为通过 FireDAC(XE5开始支持的) 使用 SqLite, 现在已换成 XE6 + IntraWeb v14.0.32 Ultimate. 首先把官方提供的 C:\Users\Public\Do ...