You are viewing a plain text version of this content. The canonical link for it is here.
Posted to xap-commits@incubator.apache.org by jm...@apache.org on 2007/10/10 22:25:36 UTC
svn commit: r583633 -
/incubator/xap/trunk/codebase/src/xap/data/controller/Iterator.js
Author: jmargaris
Date: Wed Oct 10 15:25:35 2007
New Revision: 583633
URL: http://svn.apache.org/viewvc?rev=583633&view=rev
Log:
now calling beging/end children changes efficiency hint
Modified:
incubator/xap/trunk/codebase/src/xap/data/controller/Iterator.js
Modified: incubator/xap/trunk/codebase/src/xap/data/controller/Iterator.js
URL: http://svn.apache.org/viewvc/incubator/xap/trunk/codebase/src/xap/data/controller/Iterator.js?rev=583633&r1=583632&r2=583633&view=diff
==============================================================================
--- incubator/xap/trunk/codebase/src/xap/data/controller/Iterator.js (original)
+++ incubator/xap/trunk/codebase/src/xap/data/controller/Iterator.js Wed Oct 10 15:25:35 2007
@@ -248,6 +248,7 @@
/*int*/
var iteratorLocationIndex = -1;
// first remove the old iterated nodes
+
for (var i = this._iteratedLocations.length - 1; i >= 0; i--) {
/*Location*/
var location = this._iteratedLocations[i];
@@ -266,8 +267,10 @@
}
location.remove();
}
+
return iteratorLocationIndex;
-// }
+
+
};
/**
* Reiterate relative to a parent iterator
@@ -294,15 +297,24 @@
//binding is ONLY ui for now. This will optimize the case where
//the bindings being added here resolve instantly and schedule
//their UI updates on the UI queue. If the bindings do not resolve
- //instantly this won't have much effect. Note that the symmetrical
- //unfreeze is scheduled at the very end of this method.
- // this._session.getDisplayService().freezeUiUpdates(true);
+ //instantly this won't have much effect. N
/*BindingResolver*/
var resolver = xap.data.DataFramework.getDataService(this._session).getBindingResolver();
/*ContextStack*/
var oldContextStack = resolver.getContextStack();
this._iterating = true;
try {
+
+
+ // alert("iterate over data set with dataset size: " + this._dataSet.size() + " and id: " + this._iteratorElement.getAttribute("id"));
+ // call beginChildrenChanges() in parent's peer to indicate bulk change
+ var parentHandler = this._session.getUiDocumentHandler().getHandlerForElement(this._parentElement);
+ var parentPeer = (parentHandler === undefined) ? null : parentHandler.getPeer();
+ if(parentPeer && parentPeer.beginChildrenChanges) {
+ parentPeer.beginChildrenChanges();
+ }
+
+
/*int*/
var insertIndex = this.cleanupCreation();
@@ -316,10 +328,11 @@
//attribute resolution on each child binding that needs it
//as adding the clones will invoke the plug-in handling stuff
if (this._dataSet.size() > 0) {
+
for (var currentIndex = 0; currentIndex < this._dataSet.size(); currentIndex++) {
this._contextStack.pushContext(new xap.data.controller.ContextFrame(this._dataSet, currentIndex, this._name));
try {
- for (var childIndex = 0; childIndex < this._iteratorElement.getChildCount(); childIndex++) {
+ for (var childIndex = 0; childIndex < this._iteratorElement.getChildCount(); childIndex++) {
/*Object*/
var child = this._iteratorElement.getChildAt(childIndex);
/*Location*/
@@ -348,17 +361,18 @@
}
}
finally {
- //now that we are done with this iteration, pop the context
+ //now that we are done with this iteration, pop the context
this._contextStack.popContext();
}
- }
- } else {
+ } // end outer for()
+
+ } else {
// No data, and we are ONE_TIME, so don't add a placeholder.
// if not one time, add placeholder like so:
if (this._bindingType != xap.data.controller.BindingType.ONE_TIME) {
this._parentElement.insertChildAt(insertIndex, this._iteratorPlaceHolderElement);
/*xap.data.controller.ElementLocation*/
- var location = new xap.data.controller.ElementLocation(this._iteratorPlaceHolderElement);
+ location = new xap.data.controller.ElementLocation(this._iteratorPlaceHolderElement);
this._iteratedLocations.push(location);
location.setLocationListener(this);
insertIndex++;
@@ -375,11 +389,16 @@
}
finally {
this._iterating = false;
- //now that we are done iterating return the state of the global context
+
+ //now that we are done iterating return the state of the global context
resolver.setContextStack(oldContextStack);
- //this._session.getUiUpdateQueue().invokeLater(new this.UiUpdatesUnfreezeTask(this._session));
+
+ // alert("iteration complete over data set with dataset size: " + this._dataSet.size() + " and id: " + this._iteratorElement.getAttribute("id"));
+ // call endChildrenChanges() in parent's peer to indicate end of bulk add
+ if(parentPeer && parentPeer.endChildrenChanges) {
+ parentPeer.endChildrenChanges();
+ }
}
-// }
};
/**
* Set the binding type for the iterator. It can be ONE_WAY or
@@ -525,29 +544,3 @@
xap.data.controller.Iterator.prototype.remove = function () {
this.invalidate();
};
-
-
-//-----------------------------------------------------------------------
-// Private Class:
-//-----------------------------------------------------------------------
-/**
- * This task is used from iterateOverDataSet() method to schedule ui
- * updates unfreeze. See comments in the above method for more information.
- */
-/**
- * @private
- * @constructor
- * @param aSession{xap.session.ClientSession}
-**/
-xap.data.controller.Iterator.prototype.UiUpdatesUnfreezeTask = new function (aSession) {
- this._session = aSession;
-};
-Xap.setupClassAsSubclassOf("xap.data.controller.Iterator.prototype.UiUpdatesUnfreezeTask", "Object");
-/**
- * @public
- * @return {void}
-**/
-xap.data.controller.Iterator.prototype.UiUpdatesUnfreezeTask.prototype.run = function () {
- this._session.getDisplayService().freezeUiUpdates(false);
-};
-