UNPKG

dojox

Version:

Dojo eXtensions, a rollup of many useful sub-projects and varying states of maturity – from very stable and robust, to alpha and experimental. See individual projects contain README files for details.

152 lines (132 loc) 5.98 kB
define(["dojo/dom", "dojo/dom-style", "dojo/_base/connect", "dojo/_base/lang", "dojo/_base/declare", "dijit/registry", "dojox/mvc/at", "dojox/mobile/TransitionEvent", "dojox/mvc/Repeat", "dojox/mvc/getStateful", "dojox/mvc/Output", "dojo/sniff", "dojox/mobile/RoundRectList", "dojox/mvc/WidgetList", "dojox/mvc/Templated", "dojox/mobile/ListItem", "dojo/text!../views/RoundRectWidListTemplate.html"], function(dom, domStyle, connect, lang, declare, registry, at, TransitionEvent, Repeat, getStateful, Output, has, RoundRectList, WidgetList, Templated, ListItem, RoundRectWidListTemplate){ var _connectResults = []; // events connect result var repeatmodel = null; //repeat view data model var roundRectWidList = null; // these ids are updated here and in the html file to avoid duplicate ids var backId = 'sc1back1P'; var insert1Id = 'sc1insert1xP'; var insert10Id = 'sc1insert10xP'; var remove10Id = 'sc1remove10xP'; var app = null; // insert an item var insertResult = function(index, e){ if(index<0 || index>repeatmodel.model.length){ throw Error("index out of data model."); } if((repeatmodel.model[index].First=="") || (repeatmodel.model[index+1] && (repeatmodel.model[index+1].First == ""))){ return; } var data = {id:Math.random(), "First": "", "Last": "", "Location": "CA", "Office": "", "Email": "", "Tel": "", "Fax": ""}; repeatmodel.model.splice(index+1, 0, new getStateful(data)); this.app.setDetailsContext(index+1); var transOpts = { title : "repeatDetails", target : "repeatDetails", url : "#repeatDetails", // this is optional if not set it will be created from target params : {"cursor":index+1} }; new TransitionEvent(e.target, transOpts, e).dispatch(); }; var showListData = function(/*dojox/mvc/EditStoreRefListController*/ datamodel){ // summary: // create the WidgetList programatically if it has not been created, and // set the children for items_list widget to the datamodel to show the items in the selected list. // RoundRectWidListTemplate is used for the templateString of the WidgetList. // // datamodel: dojox/mvc/EditStoreRefListController // The EditStoreRefListController whose model holds the items for the selected list. // if(!roundRectWidList){ var clz = declare([WidgetList, RoundRectList], {}); roundRectWidList = new clz({ children: at(datamodel, 'model'), childClz: declare([Templated /* dojox/mvc/Templated module return value */, ListItem /* dojox/mobile/ListItem module return value */]), childParams: { transitionOptions: {title:'Details',target:'repeatDetails',url:'#repeatDetails',params:{'cursor':this.indexAtStartup}}, clickable: true, onClick: function(){ console.log("in onClick this.indexAtStartup="+this.indexAtStartup); app.setDetailsContext(this.indexAtStartup);} }, childBindings: { titleNode: {value: at("rel:", "First")} }, templateString: RoundRectWidListTemplate }); roundRectWidList.placeAt(dom.byId("addWidgetHere")); roundRectWidList.startup(); }else{ roundRectWidList.set("children", at(datamodel, 'model')); } }; return { init: function(){ app = this.app; repeatmodel = this.loadedModels.repeatmodels; var connectResult; connectResult = connect.connect(dom.byId(insert1Id), "click", function(e){ app.insertResult(repeatmodel.model.length-1,e); }); _connectResults.push(connectResult); connectResult = connect.connect(dom.byId(insert10Id), "click", function(){ //Add 10 items to the end of the model app.showProgressIndicator(true); setTimeout(lang.hitch(this,function(){ var maxentries = repeatmodel.model.length+10; for(var i = repeatmodel.model.length; i < maxentries; i++){ var data = {id:Math.random(), "First": "First"+repeatmodel.model.length, "Last": "Last"+repeatmodel.model.length, "Location": "CA", "Office": "", "Email": "", "Tel": "", "Fax": ""}; repeatmodel.model.splice(repeatmodel.model.length, 0, new getStateful(data)); } app.showProgressIndicator(false); }), 100); }); _connectResults.push(connectResult); connectResult = connect.connect(dom.byId(remove10Id), "click", function(){ //remove 10 items to the end of the model app.showProgressIndicator(true); setTimeout(lang.hitch(this,function(){ var maxentries = repeatmodel.model.length-10; for(var i = repeatmodel.model.length; i >= maxentries; i--){ repeatmodel.model.splice(i, 1); } repeatmodel.set("cursorIndex", 0); app.showProgressIndicator(false); }), 100); }); _connectResults.push(connectResult); showListData(this.loadedModels.repeatmodels); }, beforeActivate: function(){ // summary: // view life cycle beforeActivate() if(dom.byId(backId) && !has("phone")){ domStyle.set(dom.byId(backId), "visibility", "hidden"); // hide the back button in tablet mode } if(dom.byId("tab1WrapperA")){ domStyle.set(dom.byId("tab1WrapperA"), "visibility", "visible"); // show the nav view if it being used domStyle.set(dom.byId("tab1WrapperB"), "visibility", "visible"); // show the nav view if it being used } //domStyle.set(dom.byId(wrapperIdA), "visibility", "visible"); // show the view when it is ready //domStyle.set(dom.byId(wrapperIdB), "visibility", "visible"); // show the view when it is ready //domStyle.set(dom.byId(wrapperIdC), "visibility", "visible"); // show the view when it is ready //domStyle.set(dom.byId(wrapperIdD), "visibility", "visible"); // show the view when it is ready showListData(this.loadedModels.repeatmodels); }, afterActivate: function(){ // summary: // view life cycle afterActivate() }, destroy: function(){ var connectResult = _connectResults.pop(); while(connectResult){ connect.disconnect(connectResult); connectResult = _connectResults.pop(); } } }; });