Metronic 与 VS2013/2015 合作开发 

去年购买了一个:METRONIC  (http://www.keenthemes.com/) ,最近下了最新的版本:V3.7 ,解压缩后,目录如下:(没有列出RTL 部分)

- _documentation - Contains of admin and frontend themes general documentation files.

- _resources - Contains of commercially licensed and free stock photos and the theme's PSD files.

- theme - Metronic HTML theme's main folder(Default version).
     - assets - Contains of theme related files(css, js, images, etc).
         - admin - Contains of admin theme related files(css, js, images, etc).
         - frontend - Contains of admin theme related files(css, js, images, etc).
         - global - Contains of global Metronic framework components, customized 3rd party plugins.
                      All the features under global folder can be used both in frontend theme and admin theme.

- sass - Contains of SASS(sass-lang.com) files for the admin theme(only the admin default version fully supports SASS).
     - templates - Contains of admin and frontend theme template pages.
        - admin - Contains of admin theme templates pages.
        - frontend - Contains of frontend theme template pages.

1、建立一个 VS 2013 的解决方案,在方案中,创建一个顶级文件夹(Metronic),与 Models、Controllers 等平列,将:解压缩的 METRONIC软件 下的 theme 文件夹下的内容 COPY 过来到:文件夹(metronic)下。 可以只保留有关的管理主题Admin,对 frontend 文件夹(前端主题)可以删除,而且对ADMIN 主题下的四个,可以仅保留一个。

运行VS,通过游览器本地地址:http://localhost:XXXX/metronic/templates/admin/index.html    HTML 版本;

http://localhost:9087/metronic/templates/admin/angularjs/#/dashboard.html        angularjs 版本;

2、对于 VS2015 的解决方案 ,由于静态文件放置于:WWWROOT 文件夹下,因此在其中创建一个文件夹(Metronic),复制 METRONIC软件下 theme 文件夹下的内容,类似 VS2013 的操作。

运行VS,同样通过游览器本地地址 http://localhost:XXXX/metronic/templates/admin/index.html  访问 HTML 版本。

3、本人只关注:Metronic 的 angularjs 版本。  (服务目录:E:/ZXL_CDREPORT)

4、将解决方案 Views\Home 目录的 Index.cshtml 的内容,全部置换为 metronic 软件 admin 主题下 angularjs 版本的 index.html 文件的内容。

(注意:如果直接修改 metronic 的文件,需要保存为 UTF8 格式,原文件不是UTF8。)

A、  修改 CSS 文件的相对引用路径为直接引用。即: href="../../../   修改为  href="/metronic/  .

B、  修改JAVASCRIPT (JS) 文件的引用   src="js/app.js"  及 src="js/directives.js"  为:

src="~/metronic/templates/admin/angularjs/js/app.js"

src="~/metronic/templates/admin/angularjs/js/directives.js"

C、 将 data-ng-include="'tpl/XXXX.html'"  几个 包含引入的文件,涉及:METRONIC\templates\admin\angularjs\tpl 下的几个文件。

使用 ASPNET 5 的 WEBCOMPONENT 技术实现。需要 增加控制器。 在 Controllers下增加 ViewComponents 文件夹,设计一个类:

public class LayoutTplViewComponent : ViewComponent

{
                             private readonly ApplicationDbContext db;

public LayoutTplViewComponent(ApplicationDbContext context)
                             {
                                 db = context;
                             }

public async Task<IViewComponentResult> InvokeAsync(string tpl)
                              {

return View(tpl);
                              }

}

将 INDEX 文件中 <div data-ng-include="'tpl/XXX.html'" data-ng-controller="XXXController" class="XXX hidden-xs hidden-sm">
                    </div>

更换为:

<div data-ng-controller="XXXController" class="XXX hidden-xs hidden-sm">
                            @await Component.InvokeAsync("LayoutTpl", "XXX")    //异步调用上述类的方法。
                    </div>

主题 theme-panel.html  可以不用处理,否则,好像按钮没有了作用。

实际 Footer.html 也可以不用处理。否则回到顶部的按钮不见。可能是JS脚本没有执行。

重点处理:Header sidebar 菜单,SIDEBAR 的菜单希望从数据获取后使用 RAZOR 语法生成。

5、修改 app.js 文件 的路由配置。MetronicApp.config() 方法

1)$urlRouterProvider.otherwise("XXXX");  是默认的路由,系统初始打开的内容页面,由其确定。

2)将各个路由配置的资源路径,修改为绝对引用路径。

3) 为了自动配置,此处配置可以考虑使用 单独的JS 文件。!!!

     6、修改 app.js 文件 的控制器的初始化 MetronicApp.controller()

在此方法中,在一段备注:Init entire layout(header, footer, sidebar, etc) on page load if the partials included in server side instead of loading with ng-include directive ,意思是:如果主页(INDEX)的一部分内容(比如 header,sidebar 等)不是用:ng-include 标注引入,而且通过服务器端写入,则在页面载入时,需要初始化全部 或者 部分。 取决于 通过服务器插入的部分。

全部通过服务端插入,使用 Layout.init();

(推荐:本人只是考虑  header,sidebar)部分通过服务端插入,写入相应部分,Layout.initHeader();  Layout.initSidebar();

/* Setup App Main Controller */

MetronicApp.controller('AppController', ['$scope', '$rootScope', function($scope, $rootScope) {
                 $scope.$on('$viewContentLoaded', function() {
                      Metronic.initComponents(); // init core components
                     //Layout.init();     // Init entire layout(header, footer, sidebar, etc) on page load

if the partials included in server side instead of loading with ng-include directive

Layout.initHeader();    // init header   初始化移动到此处。
                       Layout.initSidebar();                         初始化移动到此处。
                  });
            }]);

           同时,取消 各自控制器的初始化。如:

/* Setup Layout Part - Header */
              MetronicApp.controller('HeaderController', ['$scope', function($scope) {
                   $scope.$on('$includeContentLoaded', function() {
                      // Layout.initHeader(); // init header    取消此部分。
                   });
               }]);

/* Setup Layout Part - Sidebar */
              MetronicApp.controller('SidebarController', ['$scope', function($scope) {
                  $scope.$on('$includeContentLoaded', function() {
                     // Layout.initSidebar();   // init sidebar   取消此部分。
                  });
              }]);

7、控制器的修改,使用“点击展开菜单”出现立即关闭(缩回)的问题,实际是:引发了两次动作。

问题解决方法是:修改此“点击”引发的JS方法,只处理一次动作。

修改文件:/metronic/assets/admin/layout/scripts/layout.js  文件,此文件是返回一个对象,

return {} 中 initSidebar: function ()  就是前面谈到的 初始化方法。

1)在文件的开始处(layout 函数外),定义一个变量

var zxl = 0;

2)在 initSidebar 函数的开始,判断处理的次数,第二次,直接返回。

              initSidebar: function () {

                  zxl = zxl + 1;
                  if (zxl % 2 === 0) {
                     zxl = 1;
                    return;
                 }

//layout handlers
                。。。。。

                

Metronic 与 VS2013/2015 合作开发的更多相关文章

  1. 完全卸载vs2013 2015

    /uninstall /force 解压你的vs2013的安装包(iso格式). cd到解压后的文件夹 vs_ultimate.exe /uninstall /force 或者创建一个快捷方式到桌面 ...

  2. 安装VS2013 2015 需要IE10浏览器 跳过的方法

    安装VS2013 如果浏览器版本较旧的话会提示要求你更新到IE10版本,很麻烦,那么我们如何跳过呢? 复制下面代码粘贴到文本文档里,修改文本txt后缀为bat,右键管理员运行. @ECHO OFF   ...

  3. VS2013/2015 html 设计视图窗口

  4. 卸载VS2013 2015

    我有两个VS,特别讨厌,每当使用window程序删除时候,就出现 停止工作! 然后从知乎上发现了这个 https://github.com/Microsoft/VisualStudioUninstal ...

  5. vs2013/2015中scanf函数类似于error C4996: 'scanf': This function or variable may be unsafe的安全检查错误

    在使用vs2015时,遇到了scnaf函数安全性的问题,程序不能正常运行,错误如下: error C4996: 'scanf': This function or variable may be un ...

  6. vs2013\2015UML系列之-类图

    1.UML简介Unified Modeling Language (UML)又称统一建模语言或标准建模语言. 简单说就是以图形方式表现模型,根据不同模型进行分类,在UML 2.0中有13种图,以下是他 ...

  7. [.net 面向对象程序设计深入](1)UML——在Visual Studio 2013/2015中设计UML类图

    [.net 面向对象程序设计深入](1)UML——在Visual Studio 2013/2015中设计UML类图 1.UML简介 Unified Modeling Language (UML)又称统 ...

  8. Visula Studio 2013/2015自定义快捷键

    很多同学新装了VS2013/2015后, 发现快捷键变掉了, 比如之前编译快捷键是F6, 现在变成Ctrl + Shift + B, 其实要改回去很简单, 菜单Tools->Options, 打 ...

  9. UML——在Visual Studio 2013/2015中设计UML类图

    1.UML简介 Unified Modeling Language (UML)又称统一建模语言或标准建模语言. 简单说就是以图形方式表现模型,根据不同模型进行分类,在UML 2.0中有13种图,以下是 ...

随机推荐

  1. Python之迭代器和生成器

    Python 迭代器和生成器 迭代器 Python中的迭代器为类序列对象(sequence-like objects)提供了一个类序列的接口,迭代器不仅可以对序列对象(string.list.tupl ...

  2. linux lsof 用法简介

    1.简介: lsof(list open files)是一个列出当前系统打开文件的工具. 只需输入 lsof 就可以生成大量的信息,因为 lsof 需要访问核心内存和各种文件,所以必须以 root 用 ...

  3. yii2权限控制rbac之rule详细讲解(转)

    在我们之前yii2搭建后台以及rbac详细教程中,不知道你曾经疑惑过没有一个问题,rule表是做什么的,为什么在整个过程中我们都没有涉及到这张表? 相信我不说,部分人也都会去尝试,或百度或google ...

  4. redis缓存分页数据ID

    1.用户通过分类.属性进来分页时 如果没有缓存,就读数据库前10页的数据Id,转为json,根据cate_分类1+cate_分类2+cate_分类3+arr_属性1+arr_属性2+arr_属性3作为 ...

  5. 密码学初级教程(一)基本概念及DES加密算法

    密码技术在网络通信中广泛使用,本节是初步接触密码学技术的笔记. 第1章 加密-解密 破译 明文-密文 密钥 密码算法 对称密码-公钥密码(非对称密码) 单向散列函数-散列值 消息认证码 数字签名 伪随 ...

  6. 第二章平稳时间序列模型——ACF和PACF和样本ACF/PACF

    自相关函数/自相关曲线ACF   AR(1)模型的ACF: 模型为: 当其满足平稳的必要条件|a1|<1时(所以说,自相关系数是在平稳条件下求得的):          y(t)和y(t-s)的 ...

  7. Java系列笔记(4) - JVM监控与调优

    目录 参数设置收集器搭配启动内存分配监控工具和方法调优方法调优实例     光说不练假把式,学习Java GC机制的目的是为了实用,也就是为了在JVM出现问题时分析原因并解决之.通过学习,我觉得JVM ...

  8. mysql解决自动断开8小时未曾用过的链接

    今天有运维的同事反映,发布关键词不太稳定,点了没反应.就去线上看了一下日志,发现数据库没有链接,就查了一下问题 关于mysql自动断开的问题研究结果如下,在mysql中有相关参数设定,当数据库连接空闲 ...

  9. iOS开发——多线程篇——NSThread

    一.基本使用1.创建和启动线程一个NSThread对象就代表一条线程 创建.启动线程NSThread *thread = [[NSThread alloc] initWithTarget:self s ...

  10. iOS开发——OC基础-ARC、BLOCK、协议

    一.ARC ARC 是一种编译器特性!而不是IOS运行时特性,和JAVA中得垃圾回收机制完全不一样ARC是自iOS 5之后增加的新特性,完全消除了手动管理内存的烦琐,编译器会自动在适当的地方插入适当的 ...