zoukankan      html  css  js  c++  java
  • backbone--部分总结

    1、Backbone.history.start 方法可以让我们在点击后退或者前进的时候同样会触发路由的事件。

    2、添加路由的路径,添加的路由路径要求重写父类的routes这个对象

    var CustRoute = Backbone.Router.extend({
              initialize: function () {
                  console.log("Route initialize");
              },
              routes: {//routes表示路由,页面跳转的路径
                  "": "index",//冒号前边表示网页跳转的名字,冒号后边是对应的页面名称
                  "help": "help",
                  "single/:single": "fsingle",
                  "multip/:single/:multip": "fmultip"
             },
             index: function () {
                 console.log("index");
             },
             help: function () {
                 console.log("help");
             },
             fsingle: function (single) {
                 console.log("single:" + single);
             },
             fmultip: function (single, multip) {
                 console.log("multip:" + single + ":" + multip);
             }
         });
    3、workspace.navigate("help/troubleshooting",{trigger: true});
    navigate表示不通过a标签的href来实现url变更,那个至少需要用户去点击它,而使用navigate我们可以利用程序来强制实现url变更
    //触发help事件处理器,假如不加{trigger:true}则不会触发help事件处理器。
    workspace.navigate("help/troubleshooting",{replace: true});
    replace:true表示导航之前那个url将不会计入history,不会被形成浏览记录(即后退也不能回到跳转前的页面)
    4、创建模型:var model=new Backbone.Model();
           model.set("name","hellow");//设置模型参数
          console.log(model.get("name"))//获取模型参数
    例1:直接创建对象
     var model_1=new Backbone.Model({"name":"hello"});//创建模型对象
      var model_2=new Backbone.Model({"name":"word"});
      var models=new Backbone.Collection();//创建模型集合
      models.add(model_1);//把模型对象添加到模型集合中
      models.add(model_2);
      alert(JSON.stringify(models));//通过JSON中解析的方法输出集合
    例2:给构造函数添加实例方法和静态方法
     var M=Backbone.Model.extend({
      aaa:function(){//实例方法
        alert(123);
        }
      },{
      bbb:function(){//静态方法
        alert(456);
        }
      });
      var model=new M();
      model.aaa();
      M.bbb();
    例3:
      
     var M=Backbone.Model.extend({
      defaults:{
        name:'hello'
        }
      });
      var model=new M();
      alert(model.get("name"));
    例4:继承操作
      
    var M=Backbone.Model.extend({
      aaa: function(){
        alert(123);
        }
      });
      
      var ChildM=M.extend();
      var model=new ChildM;
      model.aaa();  
    例5:自定义事件

      

    var M=Backbone.Model.extend({
      defaults:{
        name:"hello"//设置模型中默认的name为hello
        },
      initialize:function(){
        this.on("change",function(){//当defaults中数据发生变化时,需要执行function中的内容,也就是当模型中name变为hi的时候,执行alert(123)
          alert(123);
          })
        }
      });
      var model=new M;
      model.set("name","hi");//设置模型中name属性为hi 
    例6:自定义事件
      
    var M=Backbone.Model.extend({
      defaults:{
        name:"hello"//设置模型中默认的name为hello
        },
      initialize:function(){
        this.on("change:name",function(){//当defaults中name数据发生变化时,需要执行function中的内容,也就是当模型中name变为hi的时候,执行alert(123)
          alert(123);
          })
        }
      });
      var model=new M;
      model.set("name","hi");//设置模型中name属性为hi
    例7:视图跟模型连接到一起

      

    $(function(){
        var M=Backbone.Model.extend({
        defaults:{
          name:"hello"
          }
        });
        var V=Backbone.View.extend({
        initialize:function(){
          this.listenTo(this.model,"change",this.show);
          },
        show:function(model){
          $("body").append('<div>'+model.get("name")+'</div>');
          }
        });
        var m=new M;
        var v=new V({model:m});
        m.set("name","hi");
       });
    例8:数据与模型 
    /*Backbone.sync=function(method,model){//Backbone.sync同步到服务器上
        alert(method+":"+JSON.stringify(model));
        model.id=1;
      };*/
      var M=Backbone.Model.extend({
      defaults:{
        name:"hello"
      },
      url:'/user'//save()是通过ajax方式把值发送给后台,url即是ajax中的url,然后存到服务器上。set()只是将数据保存到本地
      });
      var m=new M;
      m.save();//把现在的模型对象保存到服务器上
      m.save({name:"hi"});
    例9:获取服务器上的数据 
    /*Backbone.sync=function(method,model){//Backbone.sync同步到服务器上
        alert(method+":"+JSON.stringify(model));
    
      };*/
      var C=Backbone.Collection.extend({
      initialize:function(){
      this.on("reset",function(){//当获取数据成功后会执行reset中的方法,意思就是服务器中的数据获取成功执行函数
        alert(123);
      });
      },
      url:"/users"//获取服务器上数据的地址
      });
      var models=new C;
      models.fetch();//fetch()是获取服务器上的数据 
    例9:Backbone路由域历史管理
    var Workspace=Backbone.Router.extend({
      routes:{
        "help":"help",
        "search/query":"search",
        //#search/kiwis可跳转这类
        "search/:query/p:page":"search"
        //#search/kiwis/p7可跳转这类
        },
      help:function(){
        alert(1);
        },
      search:function(query,page){
        alert(2);
        }
      });
      var w=new Workspace;
      Backbone.history.start();
    例10:事件委托
    $(function(){
        var V=Backbone.View.extend({
        el:$("body"),//当前的委托人
        events:{
          'click input':'aaa',//页面上有一个input按钮和几个li
          'mouseover li':'bbb'
        },
        aaa:function(){
          alert(123);
          },
        bbb:function(){
          alert(456);
          }
        });
        var veiw=new V;
        })
    例11:html和js分离
    <script type="text/template" id="template">
    
      <% for(var i=0;i<5;i++){%>//此处可用这种方式循环,也可不循环
    
        <div><%=name %></div>
    
      <% } %>
    </script>
    <script>
     $(function(){
        var M=Backbone.Model.extend({
        defaults:{
          name:"hello"
          }
        });
        var V=Backbone.View.extend({
        initialize:function(){
          this.listenTo(this.model,"change",this.show);
          },
        show:function(model){
          $("body").append(this.template(this.model.toJSON()));
          },
        template:_.template($('#template').html());
        });
        var m=new M;
        var v=new V({model:m});
        m.set("name","hi");
       });
    </script>

    参考网站:网易云课堂视频(妙味) http://www.cnblogs.com/yaozhenfa/p/backbone_router.html

    require.js 及 mustache.js参考笔记 http://www.cnblogs.com/dongxiaolei/p/5834021.html http://www.cnblogs.com/dongxiaolei/p/5834018.html

    如果需要定义全局变量,在src/app/main.js中定义window.变量名,变量名必须为大写

  • 相关阅读:
    微信JS SDK Demo
    微信JS SDK使用权限签名算法
    微信JS接口
    微信分享JS接口失效说明及解决方案
    微信支付开发(2) 扫码支付模式一
    不懂技术的人不要对懂技术的人说这很容易实现
    独立开发者经验分享
    微信公开课PRO版张小龙演讲全文
    RC4加密算法的原理及实现
    上传APP加入视频预览--精简点名
  • 原文地址:https://www.cnblogs.com/dongxiaolei/p/5834239.html
Copyright © 2011-2022 走看看