前端數據操作的強大工具——dojo.data.ItemFileWriteStore

介紹

dojo.data.ItemFileWriteStore是Dojo用來在前端操作數據的一個強大的工具。它可以和很多UI控件合作,進行數據的存儲、傳輸和表示。比如和dijit.Tree結合時,可以在前端表示樹形。最強大的是,只要操作ItemFileWriteStore,就可以實現樹形的修改,包括增刪節點、修改屬性等。而且可以實時反映在前端頁面上。

 

現在就以dijit.Tree爲例,說明ItemFileWriteStore可以進行哪些操作(Dojo 1.7.3)。

 

代碼示例

首先創建dijit.Tree並綁定一個dojo.data.ItemFileWriteStore。

test.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
@import "../js/dijit/themes/tundra/tundra.css";
@import "../css/main.css";
</style>

</head>
<body class="tundra">
<div data-dojo-type="dojox.layout.ContentPane" style="width: 100%;">
	<div id="tree_1"></div>
</div>

<script>
		dojoConfig = {
			isDebug : false,
			parseOnLoad : true,
			async : true
		};
	</script>
	<script type="text/javascript" src="../js/dojo/dojo.js"></script>
	<script>
		require(["dijit/layout/BorderContainer",
		         "dojox/layout/ContentPane",
				  "dijit/form/Button" ]);
	</script>
	<script>
		require(
				[ "dojo/ready", 
				  "dijit/registry",
				  "dojo/_base/array", 
				  "dojo/on",
				  "dojo/dom",
				  "dojo/query",
				  "dojo/data/ItemFileWriteStore", 
				  "dojo/store/Observable",
				  "dijit/tree/ForestStoreModel", 
				  "dijit/Tree"
				  ],
				function(ready, registry, array, on, dom, query, 
						ItemFileWriteStore, Observable, ForestStoreModel,
						Tree, customDndSource, customDndTarget) {
					ready(function() {
						/*創建ItemFileWriteStore及相應的dijit.Tree*/
						var data_1 = {
								identifier: 'id',
								label: 'name',
								items: [
									{ 
										id: '0', 
										name:'Foods', 
										type: 'level1',
										children:[ 
										           {_reference: '1'},  
										           {_reference: '2'},  
										           {_reference: '3'}
										] 
									},
									{ 
										id: '1', 
										name:'Fruits', 
										type: 'level2', 
										children:[ 
										           {_reference: '5'},
										           {_reference: '6'}
										] 
									},
									{ 
										id: '5', 
										name:'Orange',
										type:"level3"
									},
									{ 
										id: '6', 
										name:'Apple',
										type:"level3"
									},
									{ 
										id: '2', 
										name:'Vegetables', 
										type: 'level2'
									},
									{ 
										id: '3', 
										name:'Cereals', 
										type: 'level2', 
										children:[ 
										           {_reference: '4'}
										] 
									},
									{ 
										id: '4', 
										name:'Rice cereal',
										type:"level3"
									}
								]
						};
						
						var store_1 = new ItemFileWriteStore({
							data : data_1
						});
						
						store_1 = new Observable(store_1);
						
						var model_1 = new ForestStoreModel({
							store : store_1,
							query : {
								type : 'level1'
							}
						});
						
						var tree_1 = new Tree({
							id : "tree_1",
							model : model_1,
							showRoot : false,
							dndController : customDndSource,
							dragThreshold : 8,
							betweenThreshold : 5,
							persist : true
						}, "tree_1");
					});
				});
	</script>
</body>
</html>

接下來,通過操作ItemFileWriteStore來實現對綁定tree的操作。

	/*操作ItemFileWriteStore*/
	
	//從dijit.Tree拿到ItemFileWriteStore
	var store = dijit.byId("tree_1").model.store;
	
	//根據identity拿到item,兩種方法
	var item = store._itemsByIdentity["1"]; //Object { id=[1], name=[1], type=[1], more...}
	var item = store._getItemByIdentity("0");
	
	//對item設置屬性及值
	store.setValue(item, "description", "This is fruits"); //true
	
	//對item取消某個屬性
	store.unsetAttribute(item, "description");  //true
	
	//拿到item的所有自定義屬性
	store.getAttributes(item);  //["id", "name", "type", "children"]
	
	//拿到item的所有屬性,包括系統屬性
	Object.keys(item);  //["id", "name", "type", "children", "_RI", "_S", "_0", "_RRM"]
	
	//對item設置值爲列表的屬性
	store.setValues(item, "order", [1,2]);  //true
	
	//拿到item爲列表的屬性
	store.getValues(item, "order");  //[1, 2]

	//拿到store的內容,以JSON String的格式
	store._getNewFileContentString();
	
	//根據各種query條件查詢store中的items
	store.fetch({query:{type:"level1"}, onComplete:function(items){console.log(items);}});
	
	//拿到item的父親
	var parent_id = Object.keys(item._RRM)[0];
	var parent = store._getItemByIdentity[parent_id];
	
	//創建item
	var newitem = {id:"7",name:"Oatmeal cereal",type:"level3"};
	var parent = store._getItemByIdentity("3");
	store.newItem(newitem, {parent: parent, attribute: "children"});
	store.save();
	
	//刪除item
	store.deleteItem(newItem);
	store.save();

總結

除了dijit.Tree,dojo.data.ItemFileWriteStore 還可以綁定DataGrid、Select、ComboBox等等各種dojo UI控件。可以說掌握了ItemFileWriteStore,就可以實現很多用戶交互的效果。


發佈了81 篇原創文章 · 獲贊 29 · 訪問量 42萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章