zoukankan      html  css  js  c++  java
  • 图解AngularJS Wijmo5和LightSwitch

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

    p_w_picpath

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

    p_w_picpath

    插入数据记录

    p_w_picpath

    业务规则校验

    p_w_picpath

    数据记录更新

    p_w_picpath

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

    p_w_picpath

    点击列头,进行数据排序

    p_w_picpath

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

    Wijmo 5控件集

    p_w_picpath

    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会减少。

    例子如下所示:

    p_w_picpath

    LightSwitch 业务层

    p_w_picpath

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

    p_w_picpath

    创建ToDo表

    p_w_picpath

    点击写代码按钮,选择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 > 0)
                    {
                        results.AddEntityError(                        "Cannot have more than 1 incomplete Task"
                            );
                    }
                }
            }

    Wijmo 5代码

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

    p_w_picpath

    p_w_picpath

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

    p_w_picpath

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

    AngularJs代码

    p_w_picpath

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

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

    p_w_picpath

    在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页面

    p_w_picpath

    创建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>

     

    参考文章:

    • Microsoft Visual Studio LightSwitch 介绍

    • LightSwitch开发者中心

    • LightSwitch 团队博客

    • Wijmo5 中文博客

  • 相关阅读:
    查看mysql数据库引擎
    crontab 从nano 转换为 vim
    Linux中,去掉终端显示的当前目录的绝对路径
    nginx 卸载后重新安装/etc/nginx配置文件没了,cannot open /etc/nginx/nginx.conf (No such file or directory)
    rabbitmq 配置
    OSError: mysql_config not found
    No module named 'ConfigParser'
    windows 安装tensorflow
    微服务架构设计
    centOS rabbitmq 安装
  • 原文地址:https://www.cnblogs.com/liudianjia/p/12614192.html
Copyright © 2011-2022 走看看