Backbone.js入門教程第二版筆記(1)

一、模塊 集合 視圖 和事件的一個綜合例子php

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src="jquery-1.9.1.js"></script>
    <script src="underscore.js"></script>
    <script src="backbone.js"></script>

</head>
<body>
    <button id="check">新手報到</button>
    <ul id="world-list">
    </ul>
    <script>
    (function ($) {

        var World=Backbone.Model.extend({
            name:null //爲何要建立一個空的name
        });

        var Worlds=Backbone.Collection.extend({
            initialize:function(models,options){
                this.on("add", options.view.addOneWorld);//初始化綁定add方法
            }
        });

        var  AppView=Backbone.View.extend({
            el:$('body'),//指定關聯的元素
            initialize:function(){//初始化方法
                this.worlds=new Worlds(null,{view:this})//實例化一個集合,而且建一個屬性view用來保存視圖
            },
            events:{
                'click #check':"checkIn"//綁定#check的click事件
            },
            checkIn:function(){
                var world_name=prompt("請問,您是哪星人?");
                world_name||(world_name = '未知');

                var world=new World({name:world_name});//實例化一個模塊,並設置name的值
                this.worlds.add(world);//將模塊添加到集合
            },
            addOneWorld:function(model){
                $("#world-list").append("<li>這裏是來自 <b>" + model.get('name') + "</b> 星球的問候</li>");
            }
        });
        var appview = new AppView;//實例化AppView

    })(jQuery);
    </script>
</body>
</html>

 

二、爲對象添加驗證規則與錯誤提示html

var User=Backbone.Model.extend({
    defaults:{
        name:'susan',
        age:18
    },
    url:"1.html",//須要設置url,由於save會調用sync方法把數據提交到服務器
    initialize:function(){
        this.on("invalid",function(model,error){//初始化時綁定驗證未經過時的事件處理函數
            console.log(error);
        });
    },
    validate:function(attributes){//重寫驗證方法 不返回或返回falsy值(假值)時不會觸發invalid?
        if(attributes.name==""){
            return "name 不能爲空!";
        }
    }
});
var user=new User();
user.set("name","");
user.save();//當save時會觸發validate方法

 

3 根目錄 urlRootjquery

var Book = Backbone.Model.extend({
    urlRoot:'/backbone_test',
    defaults:{"name":"Su","age":14}
});

var solaris = new Book({id: "data.php"});

console.log(solaris.url());///backbone_test/data.php 

solaris.save();

 

4 使用fetch從服務端獲取數據(collection中並無urlRoot屬性)json

var Book = Backbone.Model.extend({//建立一個Model
    defaults : {
        title:'default'
    }
});

var BookShelf = Backbone.Collection.extend({//建立一個集合
    model : Book,
    url:'user.json'
});

var book1 = new Book({title : 'book1'});//實例化二個model
var book2 = new Book({title : 'book2'});

var bookShelf = new BookShelf([book1, book2]); //實例化集合,並將這2個model添加到集合中,也能夠使用collection.add(model)添加。


// bookShelf.url = 'user.json'; //或者在這裏添加url
bookShelf.fetch({
    success:function(collection, response, options){
        collection.each(function(book){
            console.log(book.get('title'));//default
        });
    },error:function(collection, response, options){
        console.log('error');
    }
});

 

6 create方法 發送數據到服務端服務器

var NewBooks = Backbone.Collection.extend({
    model: Book,
    url: '/books/'
});

var books = new NewBooks;

var onebook = books.create({
    title: "I'm coming",
});

create方法會在內部調用save方法,而save方法前面提過它會調用sync把數據提交到服務器。看源碼也能夠知道,create方法最後返回了建立的model實例app

相關文章
相關標籤/搜索