国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

使用Backbone.js創建一個增刪改查表的實例代碼

來源:懂視網 責編:小采 時間:2020-11-27 20:22:59
文檔

使用Backbone.js創建一個增刪改查表的實例代碼

使用Backbone.js創建一個增刪改查表的實例代碼:Backbone.js是一套重量級的web開發框架,它是基于jquery和underscore的一個js框架,主要由三個部分組成:Model,Collection,View。1.Model:創建模型來表示數據對象,可以進行數據驗證,將對象銷毀或者保存到服務器上。2.Collection:是Model
推薦度:
導讀使用Backbone.js創建一個增刪改查表的實例代碼:Backbone.js是一套重量級的web開發框架,它是基于jquery和underscore的一個js框架,主要由三個部分組成:Model,Collection,View。1.Model:創建模型來表示數據對象,可以進行數據驗證,將對象銷毀或者保存到服務器上。2.Collection:是Model

Backbone.js是一套重量級的web開發框架,它是基于jquery和underscore的一個js框架,主要由三個部分組成:Model,Collection,View。
1.Model:創建模型來表示數據對象,可以進行數據驗證,將對象銷毀或者保存到服務器上。
2.Collection:是Model的集合,可以增加或刪除元素,以及一些方便的操作。
3.View:可以綁定html模板和事件,可以將模型或者集合渲染到頁面上,可以通過監聽模型改變或銷毀等事件重新渲染頁面。
Backbone的優勢在于將數據和界面很好的分離開來,將事件的綁定很好的剝離出來,便于管理和迭代,使得Javascript的模塊化更加清晰。Backbone比較適合頁面上有大量數據的情況,是頁面內復雜的信息溝通更清晰。

下面我用Backbone寫了一個增刪改查的表格,參照了Backbone官網Todos的例子。Backbone.js本身依賴于jquery和underscore,數據存儲我用到了backbone-localstorage.js,將數據存儲在本地數據庫中,我把主要的js代碼貼出來。其中用到了很多jquery,underscore和backbone的方法和事件,請參考相關文檔。

$(function(){

	//Model:表示一個學生
	var Student=Backbone.Model.extend({
	//默認值
	defaults:function(){
	return{
	name:"XXX",
	age:"0",
	selected:false,
	id:Students.nextId(),
	};
	},
	
	//初始化的時候判斷,如果設置的屬性值非法就設為默認值
	initialize:function(){
	if(!this.get("name")){
	this.set({"name":this.defaults().name});
	}
	if(!this.get("age")||!(/(^[1-9]\d*$)/.test(this.get("age")))){
	this.set({"age":this.defaults().age});
	}
	},

	//標記該學生是否被選中
	toggle:function(){
	this.save({selected:!this.get("selected")});
	}
	});

	//Collection:Model的集合,即所有學生的集合
	var Students=Backbone.Collection.extend({
	
	model:Student,
	
	//本地數據庫,用到backbone-localstorage.js
	localStorage:new Backbone.LocalStorage("Students-Table"),

	//返回被選中的學生的集合
	selected:function(){
	return this.filter(function(student){return student.get('selected');});
	},

	//給每個學生一個編號
	nextId:function(){
	if(!this.length)
	return 1;
	return this.last().get('id')+1;
	}
	});

	//定義一個學生集合對象
	var Students=new Students;


	//View:這個視圖表示table中的一列,即一個學生,對應一個Model
	var StudentView=Backbone.View.extend({
	//表示<tr></tr>元素
	tagName:"tr",
	
	//將相應模板寫入template屬性中,_.template()為underscore.js中的方法
	template:_.template($('#item-template').html()),

	//綁定該tr下的事件
	events:{
	"click .toggle":"toggleSelect",
	"dblclick td":"edit",
	"click a.destroy":"clear",
	"blur .edit":"close"
	},

	//初始化該View,listenTo監聽model的事件
	initialize:function(){
	//model發生變化就重新渲染視圖
	this.listenTo(this.model,'change',this.render);
	//銷毀model
	this.listenTo(this.model,'destroy',this.remove);
	},

	//this.$el為該tr節點元素,將template渲染進該節點,并把model的值寫入
	render:function(){
	this.$el.html(this.template(this.model.toJSON()));
	//如果該行被選中,則切換樣式
	this.$el.toggleClass('selected',this.model.get('selected'));
	return this;
	},

	//判斷該行是否被選中,對應model中的selected屬性
	toggleSelect:function(){
	this.model.toggle();
	},

	//雙擊td將樣式變為可編輯
	edit:function(e){
	$(e.currentTarget).addClass("editing").find("input,select").focus();
	},

	//編輯狀態下失去焦點,則修改完成
	close:function(e){
	var input=$(e.currentTarget);

	if(input.attr('name')=="name"){
	if(!input.val()){
	input.val(this.model.defaults().name);
	}
	this.model.save({"name":input.val()});
	}else if(input.attr('name')=="gender"){
	this.model.save({"gender":input.val()});
	}else{
	if(!input.val()||!(/(^[1-9]\d*$)/.test(input.val()))){
	input.val(this.model.defaults().age);
	}
	this.model.save({"age":input.val()});
	}
	input.parent().removeClass("editing");
	},

	//刪除該行的時候刪除相應model
	clear:function(){
	this.model.destroy();
	}
	});


	//View:這個視圖表示$("#content"),用來表現整個學生表格
	var AppView=Backbone.View.extend({
	el:$("#content"),

	//右下角刪除學生數目的模板
	statsTemplate:_.template($('#stats-template').html()),

	events:{
	"click #add-student":"addNewStudent",
	"click #clear-selected":"clearSelected",
	"click #select-all":"selectAll"
	},

	initialize:function(){
	this.allCheckbox=$("#select-all");
	this.main=$("#main");
	this.footer=$('footer');
	this.name=$("#new-name");
	this.age=$("#new-age");
	this.gender=$("#new-gender");

	//Collection中增加一個Model就觸發add事件
	this.listenTo(Students,'add',this.addOne);
	//一旦調用fetch方法就觸法reset事件
	this.listenTo(Students,'reset',this.addAll);
	//all事件表示該View下的所有事件,即觸法任意事件就觸法all事件
	this.listenTo(Students,'all',this.render);

	//從本地數據庫中獲取所有學生
	Students.fetch();
	},

	//渲染視圖
	render:function(){
	var selected=Students.selected().length;
	
	if(Students.length){
	this.main.show();
	this.footer.show();
	this.footer.html(this.statsTemplate({selected:selected}));
	}else{
	this.main.hide();
	this.footer.hide();
	}
	//判斷所有學生是否被選中
	this.allCheckbox.attr("checked",selected==Students.length?true:false);
	},

	//增加一個學生,同時將model傳入StudentView中
	addOne:function(student){
	var view=new StudentView({model:student});
	//將渲染后的每一列添加到表格中
	this.$("#student-list").append(view.render().el);
	},

	//增加所有學生,通過Collection.each依次調用addOne方法
	addAll:function(){
	Students.each(this.addOne,this);
	},

	//增加一個新學生
	addNewStudent:function(){
	Students.create({name:this.name.val(),gender:this.gender.val(),age:this.age.val()});
	this.name.val('');
	this.age.val('');
	this.gender.val(1);
	},

	//刪除選中列,_.invoke(集合,方法)
	clearSelected:function(){
	_.invoke(Students.selected(),'destroy');
	},

	//選中所有
	selectAll:function(){
	var selected=this.allCheckbox.attr('checked')=="checked";
	Students.each(function(student){
	student.save({'selected':selected});
	});
	}
	});

	//創建View
	var App=new AppView;
});

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

使用Backbone.js創建一個增刪改查表的實例代碼

使用Backbone.js創建一個增刪改查表的實例代碼:Backbone.js是一套重量級的web開發框架,它是基于jquery和underscore的一個js框架,主要由三個部分組成:Model,Collection,View。1.Model:創建模型來表示數據對象,可以進行數據驗證,將對象銷毀或者保存到服務器上。2.Collection:是Model
推薦度:
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 欧美日韩国产码高清综合人成 | 国产精品免费 | 免费精品国产日韩热久久 | 在线免费国产视频 | 亚洲va国产日韩欧美精品 | 国产精品成人久久久 | 国产在线高清视频 | 久久亚洲欧美综合激情一区 | 亚洲欧洲日韩国产 | 亚欧国产| 欧美一区二区三区日韩免费播 | 九九久久香港经典三级精品 | 国内自拍一区 | 国产69精品久久久久999 | 国产一区二区日韩欧美在线 | 精品久久一区二区三区 | 欧美国产日韩在线播放 | 婷婷爱爱| 欧美一区二区视频 | 国产最新视频 | 国产欧美日韩中文字幕 | 精品一区二区三区免费毛片爱 | 欧美成人h精品网站 | 在线观看免费国产 | 国产精品毛片在线直播完整版 | 青青国产成人久久91 | 国产高清视频免费在线观看 | 毛片免费网址 | 劲爆欧美第一页 | 欧美在线观看视频免费 | 国产一区精品在线观看 | 日韩欧美亚洲视频 | 日韩免费视频网站 | 精品欧美一区二区三区在线 | 韩国理论三级在线观看视频 | 日韩欧美在线综合 | 国产综合成人久久大片91 | 久久国产欧美日韩高清专区 | 日韩欧美不卡一区二区三区 | 国产原创一区二区 | 亚洲精品一线二线三线 |