Yii 中的多个 CJuiAutocomplete - 项目未呈现
我的视图页面上需要两个 CJuiAutocomplete 项目.不幸的是 - 只有其中之一正确呈现项目.另一个 - 呈现空行.我检查了萤火虫,并从数据库中正确检索了值.实际上,如果我更改 registerScript
的顺序 - 只有最后一个 registerScript
的自动完成才能正确呈现项目.
I need two CJuiAutocomplete items on my view page. Unfortunately - only one of them is rendering items properly. The other one - renders empty rows. I checked in firebug and the values are retrieved from database properly. Actually if I change the order of the registerScript
- only the autocomplete from last registerScript
renders items properly.
这是我的代码:
<?php
$this->widget('zii.widgets.jui.CJuiAutoComplete', array(
'name' => 'autocities',
'sourceUrl'=>$this->createUrl('projects/dynamicGetCities'),
'options' => array(
'minLength' => 2,
'select' => "js: function(event, ui) {
$('#lastSelectedCityId').val(ui.item.idCity);
var ciname = ui.item.name + ' (' + ui.item.directional + ')';
$('.selectedCity').html(ciname);
}
"
),
));
?>
<br/><br/>
<?php
$this->widget('zii.widgets.jui.CJuiAutoComplete', array(
'name' => 'autostreets',
'sourceUrl' =>
'js: function(request, response) {
$.ajax({
url: "'.$this->createUrl('projects/dynamicGetStreets').'",
dataType: "json",
data: {
term: request.term,
idCity: $("#lastSelectedCityId").val()
},
success: function (data) {
response(data);
}
})}',
'options' => array(
'minLength' => 2,
'select' => "js:
function(event, ui)
{
$('#lastSelectedStreetId').val(ui.item.idStreet);
$('.selectedStreet').html(ui.item.name);
}"
),
));
Yii::app()->clientScript->registerScript('input', '
$("#autostreets").data("autocomplete")._renderItem = function( ul, item ) {
return $( "<li></li>" )
.data( "item.autocomplete", item )
.append( "<a>"+item.name+"<br/><span style="font-size: 9px;">Abonentów: "+item.customCount+"</span></a>")
.appendTo( ul );
};');
Yii::app()->clientScript->registerScript('input', '
$("#autocities").data("autocomplete")._renderItem = function( ul, item ) {
return $( "<li></li>" )
.data( "item.autocomplete", item )
.append( "<a>"+item.name + " - " + item.directional+"<br/><span style="font-size: 9px;">Abonentów: "+item.customCount+"</span></a>")
.appendTo( ul );
};');
?>
推荐答案
搜索了这么多,就在问这里之后,我找到了,呵呵.registerScript
方法中的答案很简单——第一个参数是脚本的唯一 id.两次 id 都相同,因此它覆盖了前一个.谢谢.
So much searching and right after asking here on SO I found it heh.
The answer is simple in the method registerScript
- first parameter is the unique id of the script. The id was the same both times so it was overriding the previous one. Thanks.
相关文章