zoukankan      html  css  js  c++  java
  • Backbone Backbone-localStorage demo

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
      <script src="lib/json2.js"></script>
      <script src="lib/jquery-latest.js"></script>
      <script src="lib/underscore.js"></script>
      <script src="lib/backbone.js"></script>
      <script src="lib/backbone.localStorage.js"></script>
    </head>
    <body>
        <style>
            span{display: block;}
        </style>
        <p id="app"></p>
        <button id="btn">Click</button>
        <script src="js/demo.js"></script>
    </body>
    </html>

    js:

    var DemoModel = Backbone.Model.extend({
        defaults: {
            name: "King-fly",
            age: 23
        }
    });
    var DemoCollection = Backbone.Collection.extend({
        model: DemoModel,
        localStorage: new Backbone.LocalStorage("Demotodo"),
        initialize: function() {
            this.on("add", this.triAdd);
        },
        triAdd: function() {
            console.log("DemoCollection add method");
        },
        done: function(name) {
            return this.where({name: name})
        }
    });
    
    var demoCollection = new DemoCollection;
    
    var SpanView = Backbone.View.extend({
        tagName: "span",
        initialize: function() {
            this.render();
            this.$el.bind("click",this.clear);
            this.listenTo(this.model, "destroy", this.remove)
        },
        render: function() {
            this.$el.html(_.template("My name is <%= name %>,my age is <%= age %>", this.model.toJSON()));
            return this;
        },
        clear: function() {
            this.remove();
            console.dir(this);  
        }
    });
    
    var DemoView = Backbone.View.extend({
        el: "body",
        counter: 0,
        events: {
            "click button#btn": "btnClick",
            "click button#clear": "clearData"
        },
        initialize: function() {
            this.listenTo(demoCollection, "add", this.addOne);
            // this.listenTo(demoCollection, "")
            demoCollection.fetch();
        },
        clearData: function() {
            _.invoke(demoCollection.done("Wuhan"), "destroy");
        },
        render: function() {
    
        },
        btnClick: function() {
            demoCollection.create({name: "Wuhan", age: 23 + this.counter++});
        },
        addOne: function(demoModel) {
            var view = new SpanView({model: demoModel})
            $("#app").append(view.render().el);
        },
        addAll: function() {
            demoCollection.each(this.addOne, this);
        }
    })
    
    var demoView = new DemoView();

    Backbone 应用的关键点是要理清需求的流程,每个View 层的操作对象都有自己的执行逻辑, 理解各View层之间的关系对处理Model层来说至关重要。而作为数据的操作层Collection来说,起相关联数据所展现的复杂度随着view层的增加不断增加。因此控制好collection层显得至关重要。

    由于Backbone 是基于Underscore库为基础的,作为函数库的underscore需要更深层次的了解。

  • 相关阅读:
    程序员必定会爱上的10款软件(转)
    用代码来细说Csrf漏洞危害以及防御
    UPX源码分析——加壳篇
    从零开始学习渗透Node.js应用程序
    自己动手python打造渗透工具集
    国内国外最好的java开发论坛及站点 [转]
    运维无小事之一次导致数据丢失的小变更
    使用python及工具包进行简单的验证码识别
    浅析企业安全中账户安全 的重要性
    全世界最顶级黑客同时沸腾在DEF CON 25,是怎样一种体验?
  • 原文地址:https://www.cnblogs.com/wangwenfei/p/backbone_localstorage.html
Copyright © 2011-2022 走看看