zoukankan      html  css  js  c++  java
  • json+underscore+Node 小例子

    这里不再用ejs模版,只用Node去发送json数据,用Express静态化public文件,content.html引用underscore模版,引用jQuery,用jQuery向服务器发送AJAX请求,把json的数据读取到underscore的template模版内容里。

    这种写法,网页是看不到main模块里的代码,这样是前后端更加分离,比直接用Node+ejs更分离一些。这里新闻的news路由和json数据是后台提供,静态页面向远程服务器拉了一个json,由于内部有模版引擎,方便了组装。最终是用户运行了这段程序,是你的机器在运行,运行的时候发现了几个AJAX请求,发起了get请求,在本地进行了DOM操作。

    而用Node和ejs的话,Node充当了大管家,后端做的事更多,分离性不好。

    app.js:

    var express = require("express");
    
    var app = express();
    
    app.use(express.static("./public"));
    
    var shujuku = [
        {
            "biaoti":"我是1号新闻啊!我很开心啊",
            "shijian":"2017年11月14日09:21:03",
            "zuozhe":"考拉",
            "neirong":"<p>内容啊内容啊内容啊内容啊</p>"
        },
        {
            "biaoti":"我是2号新闻啊!我很开心啊",
            "shijian":"2017年11月14日09:21:03",
            "zuozhe":"Bob",
            "neirong":"内容啊内容啊内容啊内容啊"
        },
        {
            "biaoti":"我是3号新闻啊!我很开心啊",
            "shijian":"2017年11月14日09:21:03",
            "zuozhe":"Jack",
            "neirong":"内容啊内容啊内容啊内容啊"
        },
        {
            "biaoti":"我是4号新闻啊!我很开心啊",
            "shijian":"2017年11月14日09:21:03",
            "zuozhe":"hehe",
            "neirong":"内容啊内容啊内容啊内容啊"
        }
    ];
    
    app.get("/news",function (req,res) {
        //相当于send的时候发的是json数据
        res.json(shujuku);
    });
    
    app.listen(3000);

    content.html:

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <style type="text/css">
            .header{
                980px;
                height:100px;
                margin:0 auto;
                background-color: #ccc;
                margin-bottom: 20px;
            }
    
            .content {
                980px;
                margin:0 auto;
            }
            .main {
                float: left;
                599px;
                margin-right: 20px;
                border-right:1px solid red;
            }
            .aside {
                float: left;
                 360px;
                height: 400px;
                background-color: #ccc;
            }
            h1 {
                text-align: center;
            }
            .grid {
                border-bottom: 1px solid #333;
                box-shadow: 1px 1px 1px #333;
                margin-bottom: 10px;
                border-radius: 10px
                padding: 10px;
                box-sizing: border-box;
            }
        </style>
    </head>
    <body>
        <div class="header"></div>
        <div class="content">
            <div class="main">
            </div>
    
            <div class="aside"></div>
        </div>
    
        <script type="text/template" id = "moban">
            <div class="grid">
                <h3><%= biaoti %></h3>
                <p>发布时间:<%= shijian %> 作者:<%= zuozhe %></p>
                <p><%= neirong %></p>
                <p><a href="">详细</a></p>
            </div>
        </script>
    
        <script type = "text/javascript" src = "jquery-1.11.3.min.js"></script>
        <script type="text/javascript" src = "underscore.js"></script>
    
        <script type="text/javascript">
            //得到模版内容
            var mobanstring = $("#moban").html();
            var compiled = _.template(mobanstring);
            //发出AJAX请求
            $.get("/news",function (data,status) {
                for(var i = 0; i < data.length; i++) {
                    var compiledString = compiled(data[i]);
                    $(".main").append($(compiledString));
                }
            });
        </script>
    </body>
    </html>

    template用法:http://www.bootcss.com/p/underscore/#template

    结构:

     结果:

    在线预览:https://jsfiddle.net/papersnake/kf02h9x2/

  • 相关阅读:
    Leetcode: Increasing Triplet Subsequence
    Snapchat面经(师兄的)
    M面经prepare: Shuffle a deck
    M面经Prepare: Find integer Average of 2 integers.
    M面经Prepare: Positive-Negative partitioning preserving order
    M面经Prepare: Delete Words Starting With One Character
    Lintcode: Subtree
    Leetcode: Reconstruct Itinerary
    Groupon面经:Find paths in a binary tree summing to a target value
    一些小感悟(2014.04版)
  • 原文地址:https://www.cnblogs.com/zhangmingzhao/p/7840962.html
Copyright © 2011-2022 走看看