📄 dynamicpopulatebehavior.js
字号:
// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Permissive License.
// See http://www.microsoft.com/resources/sharedsource/licensingbasics/sharedsourcelicenses.mspx.
// All other rights reserved.
/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../ExtenderBase/BaseScripts.js" />
/// <reference path="../Common/Common.js" />
Type.registerNamespace('AjaxControlToolkit');
AjaxControlToolkit.DynamicPopulateBehavior = function(element) {
/// <summary>
/// The DynamicPopulateBehavior replaces the contents of an element with the result of a web service or page method call. The method call returns a string of HTML that is inserted as the children of the target element.
/// </summary>
/// <param name="element" type="Sys.UI.DomElement" domElement="true">
/// DOM Element the behavior is associated with
/// </param>
AjaxControlToolkit.DynamicPopulateBehavior.initializeBase(this, [element]);
this._servicePath = null;
this._serviceMethod = null;
this._contextKey = null;
this._cacheDynamicResults = false;
this._populateTriggerID = null;
this._setUpdatingCssClass = null;
this._clearDuringUpdate = true;
this._customScript = null;
this._clickHandler = null;
this._callID = 0;
this._currentCallID = -1;
// Whether or not we've already populated (used for cacheDynamicResults)
this._populated = false;
}
AjaxControlToolkit.DynamicPopulateBehavior.prototype = {
initialize : function() {
/// <summary>
/// Initialize the behavior
/// </summary>
AjaxControlToolkit.DynamicPopulateBehavior.callBaseMethod(this, 'initialize');
$common.prepareHiddenElementForATDeviceUpdate();
// hook up the trigger if we have one.
if (this._populateTriggerID) {
var populateTrigger = $get(this._populateTriggerID);
if (populateTrigger) {
this._clickHandler = Function.createDelegate(this, this._onPopulateTriggerClick);
$addHandler(populateTrigger, "click", this._clickHandler);
}
}
},
dispose : function() {
/// <summary>
/// Dispose the behavior
/// </summary>
// clean up the trigger event.
if (this._populateTriggerID && this._clickHandler) {
var populateTrigger = $get(this._populateTriggerID);
if (populateTrigger) {
$removeHandler(populateTrigger, "click", this._clickHandler);
}
this._populateTriggerID = null;
this._clickHandler = null;
}
AjaxControlToolkit.DynamicPopulateBehavior.callBaseMethod(this, 'dispose');
},
populate : function(contextKey) {
/// <summary>
/// Get the dymanic content and use it to populate the target element
/// </summary>
/// <param name="contextKey" type="String" mayBeNull="true" optional="true">
/// An arbitrary string value to be passed to the web method. For example, if the element to be
/// populated is within a data-bound repeater, this could be the ID of the current row.
/// </param>
// Don't populate if we already cached the results
if (this._populated && this._cacheDynamicResults) {
return;
}
// Initialize the population if this is the very first call
if (this._currentCallID == -1) {
var eventArgs = new Sys.CancelEventArgs();
this.raisePopulating(eventArgs);
if (eventArgs.get_cancel()) {
return;
}
this._setUpdating(true);
}
// Either run the custom population script or invoke the web service
if (this._customScript) {
// Call custom javascript call to populate control
var scriptResult = eval(this._customScript);
this._setTargetHtml(scriptResult);
this._setUpdating(false);
} else {
this._currentCallID = ++this._callID;
if (this._servicePath && this._serviceMethod) {
Sys.Net.WebServiceProxy.invoke(this._servicePath, this._serviceMethod, false,
{ contextKey:(contextKey ? contextKey : this._contextKey) },
Function.createDelegate(this, this._onMethodComplete), Function.createDelegate(this, this._onMethodError),
this._currentCallID);
$common.updateFormToRefreshATDeviceBuffer();
}
}
},
_onMethodComplete : function (result, userContext, methodName) {
/// <summary>
/// Callback used when the populating service returns successfully
/// </summary>
/// <param name="result" type="Object" mayBeNull="">
/// The data returned from the Web service method call
/// </param>
/// <param name="userContext" type="Object">
/// The context information that was passed when the Web service method was invoked
/// </param>
/// <param name="methodName" type="String">
/// The Web service method that was invoked
/// </param>
// ignore if it's not the current call.
if (userContext != this._currentCallID) return;
this._setTargetHtml(result);
this._setUpdating(false);
},
_onMethodError : function(webServiceError, userContext, methodName) {
/// <summary>
/// Callback used when the populating service fails
/// </summary>
/// <param name="webServiceError" type="Sys.Net.WebServiceError">
/// Web service error
/// </param>
/// <param name="userContext" type="Object">
/// The context information that was passed when the Web service method was invoked
/// </param>
/// <param name="methodName" type="String">
/// The Web service method that was invoked
/// </param>
// ignore if it's not the current call.
if (userContext != this._currentCallID) return;
if (webServiceError.get_timedOut()) {
this._setTargetHtml(AjaxControlToolkit.Resources.DynamicPopulate_WebServiceTimeout);
} else {
this._setTargetHtml(String.format(AjaxControlToolkit.Resources.DynamicPopulate_WebServiceError, webServiceError.get_statusCode()));
}
this._setUpdating(false);
},
_onPopulateTriggerClick : function() {
/// <summary>
/// Handler for the element described by PopulateTriggerID's click event
/// </summary>
// just call through to the trigger.
this.populate(this._contextKey);
},
_setUpdating : function(updating) {
/// <summary>
/// Toggle the display elements to indicate if they are being updated or not
/// </summary>
/// <param name="updating" type="Boolean">
/// Whether or not the display should indicated it is being updated
/// </param>
this.setStyle(updating);
if (!updating) {
this._currentCallID = -1;
this._populated = true;
this.raisePopulated(this, Sys.EventArgs.Empty);
}
},
_setTargetHtml : function(value) {
/// <summary>
/// Populate the target element with the given value
/// </summary>
/// <param name="value" type="String">
/// The data to populate the target element.
/// </param>
// Make sure the element is still accessible
var e = this.get_element()
if (e) {
// Use value for input elements; otherwise innerHTML
if (e.tagName == "INPUT") {
e.value = value;
} else {
e.innerHTML = value;
}
}
},
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -