CAutoComplete

优质
小牛编辑
131浏览
2023-12-01
所有包 | 属性 | 方法
system.web.widgets
继承class CAutoComplete » CInputWidget » CWidget » CBaseController » CComponent
源自1.0
版本$Id: CAutoComplete.php 3515 2011-12-28 12:29:24Z mdomba $
源码framework/web/widgets/CAutoComplete.php
CAutoComplete生成一个自动完成的输入字段。

CAutoComplete基于jQuery Autocomplete。

从1.1.3版开始,这个类被弃用。考虑使用CJuiAutoComplete代替。 这儿是 a good migration guide from the author of both JavaScript solutions.

公共属性

隐藏继承属性

属性类型描述定义在
actionPrefixstringactions的ID的前缀。 当微件在CController::actions中声明了 动作提供者,可以为其动作的ID指定前缀以区别 于别的微件或控制器。当微件用于控制器 的视图中时,必须配置同样的前缀。CWidget
attributestringthe 与此小物件相关联的属性。 这个名字可以包含方括号 (e.CInputWidget
autoFillboolean在选择值的过程中,如果有更多的键盘输入或者鼠标选择, 是否自动填充内容到输入框中。默认值是false。CAutoComplete
cacheLengthinteger后台查询的结果保存在缓存中的数量。 如果设置为1(即当前结果),将不会进行缓存。此值必须大于等于1。默认值是10。CAutoComplete
controllerCController返回此微件所属的控制器。CWidget
cssFilemixed此微件使用的CSS文件。默认值是null,表示 使用包含在此微件中的默认CSS文件。 如果设置为false,将不会使用CSS文件。其他情况下,指定 的CSS文件将被包含在此微件中。CAutoComplete
dataarray可以存储为客户端数据的数组,用于提供候选项。 每个数组元素可以是一个字符串或一个关联数组。 如果设置了此属性值,url属性将被忽略。CAutoComplete
delayinteger自动输入控件在接收到一次击键后 延迟多少毫秒后被激活。默认值是400。CAutoComplete
extraParamsarray后端的额外参数。如果你指定了 array('bar'=>4),此自动输入控件将调用一个GET参数'bar=4' 调用后端程序。此参数可以是一个函数,此函数在每次 请求之前被调用来计算参数的值。CAutoComplete
formatItemstring一个JavaScript函数,它可以对一个条目进行高级标识。 对于结果集中的每一行,此函数都将被调用。返回值将被显示结果集列表 中的一个LI元素中。自动输入控件提供了四个参数:组成结果集的行, 每一行在结果集列表中的位置(从1开始),结果集列表中条目的数量, 以及搜索关键词。 默认行为是假设一个单一的行包含一个单一的值。CAutoComplete
formatMatchstring一个JavaScript函数,它用于限制自动完成控件将查找的 匹配数据。例如,你有一些条目希望显示给用户看到,但不希望它们被 包含在搜索出的数据中。此函数的调用参数与formatItem一致, 默认行为也与formatItem一致。CAutoComplete
formatResultstring一个JavaScript函数,它为需要放到输入域的值提供了 格式。再次重复三个参数:数据,位置(从1开始)和数据项的总数。 默认值行为可以是用作结果集的简单数据,也可以是同样的值 提供给formatItem。CAutoComplete
highlightboolean|string是否、如何匹配选择框的高度。 设置为false将禁用,设置为一个Javascript函数可以进行自定义。 此函数获取此值作为第一个参数,搜索关键词作为第二个参数, 然后返回格式化后的值。默认行为是将搜索关键词以<strong>元素包装。CAutoComplete
htmlOptionsarray渲染输入标签时附加的HTML选项CInputWidget
idstring返回此微件的ID。如果需要的话,将生产一个新的ID并将其返回。CWidget
inputClassstring输入元素使用的CSS类。默认值是"ac_input"。CAutoComplete
loadingClassstring从后端加载数据时使用的CSS类。默认值是"ac_loading"。CAutoComplete
matchCaseboolean比较时是否大小写敏感。仅在你使用缓存时此属性值 才是重要的。默认值是false。CAutoComplete
matchContainsboolean是否在结果集中进行比较(例如,是否“ba” 匹配“foo bar”)。仅当你使用缓存时此属性值才是重要的。 请别与自动填充(autofill)混淆。默认值是false。CAutoComplete
matchSubsetboolean此自动输入控件是否可以为更多特定的查询使用 同一个缓存。可以这么理解:所有匹配"foot"的结果集,是一个 所有匹配"foo"的结果集的子集。通常此属性设置为true,通过 使用它可以降低服务器的负荷和增加性能。此属性仅在cacheLength 的设置值大于1时有用,例如10。默认值是true。CAutoComplete
maxinteger在选择框中的条目数的限制。它也将作为 "limit"传递给一个远程请求。默认值是10。CAutoComplete
methodChainstring若干方法调用的链,将被附加到自动输入控件的构造方法的结尾部分。 例如,".CAutoComplete
minCharsinteger用户至少需要输入几个字符才会 激活自动输入控件。默认值是1。CAutoComplete
modelCModel与此小物件相关联的数据模型。CInputWidget
multipleboolean是否允许输入多于一个的自动完成的值。默认值是false。CAutoComplete
multipleSeparatorstring当使用多选项时插入到值之间的分隔符。默认值是“,”。CAutoComplete
mustMatchboolean如果设置为true,此自动输入控件将仅允许 后台提供的选项。无效值在输入框中是空白。 默认值是false。CAutoComplete
namestring输入控件的名字。如果model没有设置,则必须设置此属性。CInputWidget
optionsarray将被传递给自动完成js对象的额外选项。 它允许你覆盖现有的自动完成js类的函数(例如,parse()函数)。

如果你希望提供本地化的JavaScript代码,你需要在引号中的字符串 的前面加上“js:”前缀。
CAutoComplete
ownerCBaseController返回此微件的所有者或创建者。CWidget
resultsClassstring下拉列表使用的CSS类。默认值是"ac_results"。CAutoComplete
scrollboolean当结果集超过了scrollHeight设置的可用高度时,是否允许卷动。默认值是true。CAutoComplete
scrollHeightinteger可卷动的自动完成控件的高度。默认值是180。CAutoComplete
selectFirstboolean如果设置为true,当按下tab键或回车键时, 第一个候选项将被选中,即使它没有被使用键盘或鼠标手动 选中。如果已有一个手动选中的选项(已加亮),该选项将 被优先选中。默认值是true。CAutoComplete
skinmixed微件使用的皮肤的名称。默认为“default”。 如果此属性设置为false,微件将不会有皮肤被使用。CWidget
textAreabooleanwhether 是否使用多行文本区来显示自动输入域。默认值是false, 表示使用一个文本输入框。CAutoComplete
urlstring|array可以返回候选项的URL。 同时传递到此URL的还有一个名为“q”的GET参数,此参数包含了用户最新的输入信息。 如果此URL给定为一个数组,它将被认为是一个路由,指向一个控制器的动作,并使用 CController::createUrl来生成一个URL; 如果此URL给定为一个空字符串,则将使用当前的URL。 如果data已设置,则此属性被忽略。CAutoComplete
valuestring输入控件的值CInputWidget
viewPathstring返回包含此微件所需的视图文件的路径。CWidget
widthinteger为选择框指定一个自定义宽度。默认值是此输入元素的宽度。CAutoComplete

受保护属性

隐藏继承属性

属性类型描述定义在
clientOptionsarrayJavaScript的选项。CAutoComplete

公共方法

隐藏继承方法

方法描述定义在
__call()如果类中没有调的方法名,则调用这个方法。CComponent
__construct()构造器。CWidget
__get()返回一个属性值、一个事件处理程序列表或一个行为名称。CComponent
__isset()检查一个属性是否为null。CComponent
__set()设置一个组件的属性值。CComponent
__unset()设置一个组件的属性为null。CComponent
actions()返回此widget使用的动作的列表。CWidget
asa()返回这个名字的行为对象。CComponent
attachBehavior()附加一个行为到组件。CComponent
attachBehaviors()附加一个行为列表到组件。CComponent
attachEventHandler()为事件附加一个事件处理程序。CComponent
beginCache()Begins fragment caching.CBaseController
beginClip()Begins recording a clip.CBaseController
beginContent()Begins the rendering of content that is to be decorated by the specified view.CBaseController
beginWidget()Creates a widget and executes it.CBaseController
canGetProperty()确定属性是否可读。CComponent
canSetProperty()确定属性是否可写。CComponent
createWidget()Creates a widget and initializes it.CBaseController
detachBehavior()从组件中分离一个行为。CComponent
detachBehaviors()从组件中分离所有行为。CComponent
detachEventHandler()分离一个存在的事件处理程序。CComponent
disableBehavior()禁用一个附加行为。CComponent
disableBehaviors()禁用组件附加的所有行为。CComponent
enableBehavior()启用一个附加行为。CComponent
enableBehaviors()启用组件附加的所有行为。CComponent
endCache()Ends fragment caching.CBaseController
endClip()Ends recording a clip.CBaseController
endContent()Ends the rendering of content.CBaseController
endWidget()Ends the execution of the named widget.CBaseController
evaluateExpression()计算一个PHP表达式,或根据组件上下文执行回调。CComponent
getController()返回此微件所属的控制器。CWidget
getEventHandlers()返回一个事件的附加处理程序列表。CComponent
getId()返回此微件的ID。如果需要的话,将生产一个新的ID并将其返回。CWidget
getOwner()返回此微件的所有者或创建者。CWidget
getViewFile()根据视图名查找视图文件。CWidget
getViewPath()返回包含此微件所需的视图文件的路径。CWidget
hasEvent()确定一个事件是否定义。CComponent
hasEventHandler()检查事件是否有附加的处理程序。CComponent
hasProperty()确定属性是否被定义。CComponent
init()初始化此微件。CAutoComplete
raiseEvent()发起一个事件。CComponent
registerClientScript()注册必须的CSS和JavaScript。CAutoComplete
registerCssFile()注册必须的CSS文件。CAutoComplete
render()渲染一个视图。CWidget
renderFile()Renders a view file.CBaseController
renderInternal()Renders a view file.CBaseController
run()运行此微件。CWidget
setId()设置此微件的ID。CWidget
widget()Creates a widget and executes it.CBaseController

受保护方法

隐藏继承方法

方法描述定义在
getClientOptions()返回JavaScript的选项。CAutoComplete
hasModel()确定此小物件是否与一个数据模型相关联。CInputWidget
resolveNameID()CInputWidget

属性详细

autoFill 属性 public boolean $autoFill;

在选择值的过程中,如果有更多的键盘输入或者鼠标选择, 是否自动填充内容到输入框中。默认值是false。

cacheLength 属性 public integer $cacheLength;

后台查询的结果保存在缓存中的数量。 如果设置为1(即当前结果),将不会进行缓存。此值必须大于等于1。默认值是10。

clientOptions 属性 只读 protected array getClientOptions()

JavaScript的选项。

cssFile 属性 public mixed $cssFile;

此微件使用的CSS文件。默认值是null,表示 使用包含在此微件中的默认CSS文件。 如果设置为false,将不会使用CSS文件。其他情况下,指定 的CSS文件将被包含在此微件中。

data 属性 public array $data;

可以存储为客户端数据的数组,用于提供候选项。 每个数组元素可以是一个字符串或一个关联数组。 如果设置了此属性值,url属性将被忽略。

参见

  • url
delay 属性 public integer $delay;

自动输入控件在接收到一次击键后 延迟多少毫秒后被激活。默认值是400。

extraParams 属性 public array $extraParams;

后端的额外参数。如果你指定了 array('bar'=>4),此自动输入控件将调用一个GET参数'bar=4' 调用后端程序。此参数可以是一个函数,此函数在每次 请求之前被调用来计算参数的值。

formatItem 属性 public string $formatItem;

一个JavaScript函数,它可以对一个条目进行高级标识。 对于结果集中的每一行,此函数都将被调用。返回值将被显示结果集列表 中的一个LI元素中。自动输入控件提供了四个参数:组成结果集的行, 每一行在结果集列表中的位置(从1开始),结果集列表中条目的数量, 以及搜索关键词。 默认行为是假设一个单一的行包含一个单一的值。

formatMatch 属性 public string $formatMatch;

一个JavaScript函数,它用于限制自动完成控件将查找的 匹配数据。例如,你有一些条目希望显示给用户看到,但不希望它们被 包含在搜索出的数据中。此函数的调用参数与formatItem一致, 默认行为也与formatItem一致。

formatResult 属性 public string $formatResult;

一个JavaScript函数,它为需要放到输入域的值提供了 格式。再次重复三个参数:数据,位置(从1开始)和数据项的总数。 默认值行为可以是用作结果集的简单数据,也可以是同样的值 提供给formatItem。

highlight 属性 public boolean|string $highlight;

是否、如何匹配选择框的高度。 设置为false将禁用,设置为一个Javascript函数可以进行自定义。 此函数获取此值作为第一个参数,搜索关键词作为第二个参数, 然后返回格式化后的值。默认行为是将搜索关键词以<strong>元素包装。

inputClass 属性 public string $inputClass;

输入元素使用的CSS类。默认值是"ac_input"。

loadingClass 属性 public string $loadingClass;

从后端加载数据时使用的CSS类。默认值是"ac_loading"。

matchCase 属性 public boolean $matchCase;

比较时是否大小写敏感。仅在你使用缓存时此属性值 才是重要的。默认值是false。

matchContains 属性 public boolean $matchContains;

是否在结果集中进行比较(例如,是否“ba” 匹配“foo bar”)。仅当你使用缓存时此属性值才是重要的。 请别与自动填充(autofill)混淆。默认值是false。

matchSubset 属性 public boolean $matchSubset;

此自动输入控件是否可以为更多特定的查询使用 同一个缓存。可以这么理解:所有匹配"foot"的结果集,是一个 所有匹配"foo"的结果集的子集。通常此属性设置为true,通过 使用它可以降低服务器的负荷和增加性能。此属性仅在cacheLength 的设置值大于1时有用,例如10。默认值是true。

max 属性 public integer $max;

在选择框中的条目数的限制。它也将作为 "limit"传递给一个远程请求。默认值是10。

methodChain 属性 public string $methodChain;

若干方法调用的链,将被附加到自动输入控件的构造方法的结尾部分。 例如,".result(function(...){})" 将使得在用户选择了一个选项之后,指定的 js函数被执行。

minChars 属性 public integer $minChars;

用户至少需要输入几个字符才会 激活自动输入控件。默认值是1。

multiple 属性 public boolean $multiple;

是否允许输入多于一个的自动完成的值。默认值是false。

multipleSeparator 属性 public string $multipleSeparator;

当使用多选项时插入到值之间的分隔符。默认值是“,”。

mustMatch 属性 public boolean $mustMatch;

如果设置为true,此自动输入控件将仅允许 后台提供的选项。无效值在输入框中是空白。 默认值是false。

options 属性 public array $options;

将被传递给自动完成js对象的额外选项。 它允许你覆盖现有的自动完成js类的函数(例如,parse()函数)。

如果你希望提供本地化的JavaScript代码,你需要在引号中的字符串 的前面加上“js:”前缀。

resultsClass 属性 public string $resultsClass;

下拉列表使用的CSS类。默认值是"ac_results"。

scroll 属性 public boolean $scroll;

当结果集超过了scrollHeight设置的可用高度时,是否允许卷动。默认值是true。

scrollHeight 属性 public integer $scrollHeight;

可卷动的自动完成控件的高度。默认值是180。

selectFirst 属性 public boolean $selectFirst;

如果设置为true,当按下tab键或回车键时, 第一个候选项将被选中,即使它没有被使用键盘或鼠标手动 选中。如果已有一个手动选中的选项(已加亮),该选项将 被优先选中。默认值是true。

textArea 属性 public boolean $textArea;

whether 是否使用多行文本区来显示自动输入域。默认值是false, 表示使用一个文本输入框。

url 属性 public string|array $url;

可以返回候选项的URL。 同时传递到此URL的还有一个名为“q”的GET参数,此参数包含了用户最新的输入信息。 如果此URL给定为一个数组,它将被认为是一个路由,指向一个控制器的动作,并使用 CController::createUrl来生成一个URL; 如果此URL给定为一个空字符串,则将使用当前的URL。 如果data已设置,则此属性被忽略。

参见

  • data
width 属性 public integer $width;

为选择框指定一个自定义宽度。默认值是此输入元素的宽度。

方法详细

getClientOptions() 方法
protected array getClientOptions()
{return}arrayJavaScript的选项。
源码: framework/web/widgets/CAutoComplete.php#266 (显示) protectedfunctiongetClientOptions()
{
static$properties=array(
'minChars','delay','cacheLength','matchSubset',
'matchCase','matchContains','mustMatch','selectFirst',
'extraParams','multiple','multipleSeparator','width',
'autoFill','max','scroll','scrollHeight','inputClass',
'formatItem','formatMatch','formatResult','highlight',
'resultsClass','loadingClass');
static$functions=array('formatItem','formatMatch','formatResult','highlight');

$options=$this->options;
foreach($propertiesas$property)
{
if($this->$property!==null)
$options[$property]=$this->$property;
}
foreach($functionsas$func)
{
if(is_string($this->$func)&&strncmp($this->$func,'js:',3))
$options[$func]='js:'.$this->$func;
}

return$options;
}
init() 方法
public void init()
源码: framework/web/widgets/CAutoComplete.php#202 (显示) publicfunctioninit()
{
list($name,$id)=$this->resolveNameID();
if(isset($this->htmlOptions['id']))
$id=$this->htmlOptions['id'];
else
$this->htmlOptions['id']=$id;
if(isset($this->htmlOptions['name']))
$name=$this->htmlOptions['name'];

$this->registerClientScript();

if($this->hasModel())
{
$field=$this->textArea?'activeTextArea':'activeTextField';
echoCHtml::$field($this->model,$this->attribute,$this->htmlOptions);
}
else
{
$field=$this->textArea?'textArea':'textField';
echoCHtml::$field($name,$this->value,$this->htmlOptions);
}
}

初始化此微件。 此方法注册所有必须的客户端脚本然后渲染 自动输入控件。

registerClientScript() 方法
public void registerClientScript()
源码: framework/web/widgets/CAutoComplete.php#229 (显示) publicfunctionregisterClientScript()
{
$id=$this->htmlOptions['id'];

$acOptions=$this->getClientOptions();
$options=$acOptions===array()?'{}':CJavaScript::encode($acOptions);

$cs=Yii::app()->getClientScript();
$cs->registerCoreScript('autocomplete');
if($this->data!==null)
$data=CJavaScript::encode($this->data);
else
{
$url=CHtml::normalizeUrl($this->url);
$data='"'.$url.'"';
}
$cs->registerScript('Yii.CAutoComplete#'.$id,"jQuery("#{$id}").legacyautocomplete($data,{$options}){$this->methodChain};");

if($this->cssFile!==false)
self::registerCssFile($this->cssFile);
}

注册必须的CSS和JavaScript。

registerCssFile() 方法
public static void registerCssFile(string $url=NULL)
$urlstringCSS文件的URL。如果为null,将使用默认值的CSS文件的URL。
源码: framework/web/widgets/CAutoComplete.php#255 (显示) publicstaticfunctionregisterCssFile($url=null)
{
$cs=Yii::app()->getClientScript();
if($url===null)
$url=$cs->getCoreScriptUrl().'/autocomplete/jquery.autocomplete.css';
$cs->registerCssFile($url);
}

注册必须的CSS文件。