自己平时会使用的一个自定义前端结构

简介:

这个结构我是根据一些前端技术整合到一起,方便我平时测试一些看到的前端技术,例如CSS、JS等,将理论上升到验证的阶段。

requirejs+backbone+jquery+underscore+jasmine等技术整合集成

现在JS脚本也讲究MVC结构,所以在闲暇的时候查阅了相关资料。使用backbone实现MVC。很多地方都会提到requirejs,一个异步模块加载器。感觉这个东西很高大上,然后就与backbone结合使用。在查询requirejs配置的时候,发现可以与node.js结合使用来做脚本整合。

build文件是在做node整合JS脚本的时候的配置文件,config文件是requirejs的配置文件。optimize是个批处理,执行node的文件整合。关于node整合的说明可以参考这篇文章http://www.oschina.net/translate/optimize-requirejs-projects

scripts文件

我也做了简单的分层app放的是入口文件,libs放的是一些库文件例如backbone、jquery等,util我放了一些工具文件例如const存放一些常量等,另外三个就是MVC文件了。config文件如下:

// Author: Pwstrick 
// Filename: config.js

// Require.js allows us to configure shortcut alias
// Their usage will become more apparent futher along in the tutorial.
var require = {
  paths: {
    jquery: '../libs/jquery/jquery',
    mustache: '../libs/mustache/mustache',
    underscore: '../libs/underscore/underscore',
    backbone: '../libs/backbone/backbone',
    dialog: '../libs/artDialog/dialog',
    dialogPlugins: '../libs/artDialog/plugins/iframeTools.source',
    extend: '../util/extend',
    constUtil: '../util/const',
    templates: '../../view',
    articleModel: '../models/articleModel',
    articleView: '../views/articleView'
  },
  shim: {
    'backbone': {
            //These script dependencies should be loaded before loading
            //backbone.js
            deps: ['underscore', 'jquery'],
            //Once loaded, use the global 'Backbone' as the
            //module value.
            exports: 'Backbone'
    },
    'underscore': {
            exports: '_'
    },
    'dialog': {
            deps: ['jquery'],
            exports: "artDialog"
    },
    'dialogPlugins': {
            deps: ['dialog']
    },
    'extend': {
            deps: ['jquery', 'dialog']
    },
    'articleModel': {
            deps: ['extend']
    }
  }
};

 

单元测试框架jasmine

将这个也结合到了自己的结构中。有了这个东西,就能调试出许多潜在的BUG。

jasmine的配置文件

require.config({
  baseUrl: "../../scripts/",
  urlArgs: 'cb=' + Math.random(),
  paths: {
    jquery: 'libs/jquery/jquery',
    underscore: 'libs/underscore/underscore',
    backbone: 'libs/backbone/backbone',
    'backbone.localStorage': 'libs/backbone/backbone.localStorage',
    extend: 'util/extend',
    constUtil: 'util/const',
    jasmine: 'libs/jasmine/jasmine',
    'jasmine-html': 'libs/jasmine/jasmine-html',
    'jasmine-jquery': 'libs/jasmine/jasmine-jquery',
    'jasmine-ajax': 'libs/jasmine/jasmine-ajax',
    mustache: 'libs/mustache/mustache',
    spec: '../test/jasmine/spec/'
  },
  shim: {
    underscore: {
      exports: "_"
    },
    backbone: {
      deps: ['underscore', 'jquery'],
      exports: 'Backbone'
    },
    'backbone.localStorage': {
      deps: ['backbone'],
      exports: 'Backbone'
    },
    jasmine: {
      exports: 'jasmine'
    },
    'jasmine-html': {
      deps: ['jasmine'],
      exports: 'jasmine'
    },
    'jasmine-jquery': {
      deps: ['jasmine'],
      exports: 'jasmine_jquery'
    },
    'jasmine-ajax': {
      deps: ['jasmine'],
      exports: 'jasmine_ajax'
    },
    'extend': {
      deps: ['jquery']
    }
  }
});


window.store = "TestStore"; // override local storage store name - for testing

//遍历对象中的各种key
alertKeys = function(object) {
        var keys = [];
        for(var key in object) keys.push(key);
        alert(keys.join(","));
};

require(['underscore', 'jquery', 'jasmine-html', 'jasmine-jquery', 'jasmine-ajax', 'constUtil', 'extend'], function(_, $, jasmine){

  var jasmineEnv = jasmine.getEnv();
  jasmineEnv.updateInterval = 1000;

  var htmlReporter = new jasmine.HtmlReporter();

  jasmineEnv.addReporter(htmlReporter);

  jasmineEnv.specFilter = function(spec) {
    return htmlReporter.specFilter(spec);
  };
  //设置模板路径
  jasmine.getFixtures().fixturesPath = 'spec/fixtures';
  
  
  var specs = [];

    specs.push('spec/models/ArticleSpec');
    specs.push('spec/views/ArticleSpec');
    specs.push('spec/utils/underscore');

  $(function(){
    require(specs, function(){
      jasmineEnv.execute();
    });
  });

});

 

使用HTML5标签

加入了一个modernizr库,帮助那些不支持HTML5标签的浏览器可以识别出。在这里我用到了响应式的技术、HTML5技术、模版技术、自定义字体等

<!DOCTYPE HTML>
<html lang="en-US">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1" />
    <title>假期闲做</title>
    <script type="text/javascript">document.cookie='resolution='+Math.max(screen.width,screen.height)+';path=/';</script> 
    <link rel="stylesheet" href="styles/style.css" type="text/css"/>
    <script src="optimize/libs/modernizr/modernizr.js" type="text/javascript"></script>
    <script src="optimize/config.js" type="text/javascript"></script>
</head>
<body>
    <!--网站页眉开始-->
    <header class="shortcut" role="banner" aria-label="平文主页">
        <div class="wrap nav_wrap">
            <nav class="nav" id="shortcut_nav" role="navigation">
                <dl>
                    <dd class="cur">
                        <a href="#">个人主页</a>
                        <div class="corner"></div>
                        <ul>
                            <li><a href="#">历史书籍</a></li>
                            <li><a href="#">技术书籍</a></li>
                            <li><a href="#">文化书籍</a></li>
                        </ul>
                    </dd>
                    <dd>
                        <a href="#">已阅书籍</a>
                        <div class="corner"></div>
                        <ul>
                            <li><a href="#">历史书籍</a></li>
                            <li><a href="#">技术书籍</a></li>
                            <li><a href="#">文化书籍</a></li>
                        </ul>
                    </dd>
                    <dd><a href="#">技术交流</a></dd>
                    <dd><a href="#">外出旅行</a></dd>
                    <dd><a href="#">个人爱好</a></dd>
                </dl>
            </nav>
            <div class="logo" role="banner">Pwstrick</div>
        </div>
        <div class="sawtooth"></div>
    </header>
    <!--网站页眉结束-->
    <div id="slider" class="img_slide wrap" role="main">
        <img src="images/img1.jpg" alt="广告" height="400"/>
    </div>
    <div class="wrap" id="main">
        <ul class="article_list">
            <li><a href="#">无障碍网页应用 WAI-ARIA</a></li>
            <li><a href="#">利用状态模式处理多个模态弹出层的显示隐藏</a></li>
            <li><a href="#">优秀博客推荐:各种数据结构与算法知识入门经典</a></li>
            <li><a href="#">迷你MVVM框架</a></li>
        </ul>
        
        <script type="text/template" id="tpl_article_list">
            <a href="javascript:void(0)" id="btnArt">删除添加</a>
            <ul class="article_list" id="article_list">
            {{#article}}
                <li><a href="#">{{title}}</a></li>
            {{/article}}
            </ul>
        </script>
        <a href="javascript:void(0)" id="operate">操作</a>
        
        <ul class="pages">
            <li><a href="#"><</a></li>
            <li><a href="#">1</a></li>
            <li><a href="#">2</a></li>
            <li><a href="#">></a></li>
        </li>
    </div>
    <script src="optimize/libs/require/require.js" type="text/javascript" data-main="scripts/app/main"></script>
</body>
</html>

 

我的表达水平不是很给力,大家有兴趣的话也可以自己去搞个结构,方便自己以后快速开发与积累技术知识,以及验证各种技术。源码下载如下

holiday1.1.rar

也可以通过这个链接下载http://download.csdn.net/detail/loneleaf1/7466503





    本文转自 咖啡机(K.F.J)   博客园博客,原文链接:http://www.cnblogs.com/strick/p/3776335.html,如需转载请自行联系原作者




相关文章
|
2月前
|
Dart 前端开发
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
132 75
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
9天前
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
|
2月前
|
Dart 前端开发 容器
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
105 18
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
4月前
|
前端开发 数据安全/隐私保护
.自定义认证前端页面
.自定义认证前端页面
33 1
.自定义认证前端页面
|
5月前
|
JSON 前端开发 数据格式
前端的全栈之路Meteor篇(五):自定义对象序列化的EJSON介绍 - 跨设备的对象传输
EJSON是Meteor框架中扩展了标准JSON的库,支持更多数据类型如`Date`、`Binary`等。它提供了序列化和反序列化功能,使客户端和服务器之间的复杂数据传输更加便捷高效。EJSON还支持自定义对象的定义和传输,通过`EJSON.addType`注册自定义类型,确保数据在两端无缝传递。
|
6月前
|
前端开发 定位技术 API
二、前端高德地图、渲染标记(Marker)引入自定义icon,手动设置zoom
文章介绍了如何在前端使用高德地图API渲染标记(Marker),并引入自定义图标,同时展示了如何手动设置地图的缩放级别。
674 1
|
5月前
|
资源调度 前端开发 安全
前端实战:基于Verdaccio搭建私有npm仓库,轻松上传与下载自定义npm插件包
前端实战:基于Verdaccio搭建私有npm仓库,轻松上传与下载自定义npm插件包
290 0
|
5月前
|
前端开发 Java 数据库
springBoot:template engine&自定义一个mvc&后端给前端传数据&增删改查 (三)
本文介绍了如何自定义一个 MVC 框架,包括后端向前端传递数据、前后端代理配置、实现增删改查功能以及分页查询。详细展示了代码示例,从配置文件到控制器、服务层和数据访问层的实现,帮助开发者快速理解和应用。
|
5月前
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
406 14
|
5月前
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
93 0

热门文章

最新文章