Yii JUI Autocomplete - 将javascript传递给sourceUrl


Yii JUI Autocomplete - Pass javascript into sourceUrl

我正在处理一个带有 2 个自动完成小部件的表单。 第一个小部件获取公司名称并填充表单上的各种其他项目:

<?php $this->widget('zii.widgets.jui.CJuiAutoComplete', array(
    'attribute'=>'company_name',
    'model'=>$model,
    'sourceUrl'=>array('company/aclist'),
    'options'=>array(
        'minLength'=>'2',
        'select'=>'js: function(e,u){
            $("#'.CHtml::activeId($model,'company_address').'").val(u.item.address);
            $("#'.CHtml::activeId($model,'company_phone').'").val(u.item.phone);
            $("#'.CHtml::activeId($model,'company_id').'").val(u.item.id);
        }',
    ),
    'htmlOptions'=>array(
        'size'=>45,
        'maxlength'=>45,
    ),
 ));?>

这非常有效。 第二个小部件非常相似,只是它旨在获取与该公司相关的联系人。 如何将company_id值传递给第二个自动完成?

这是我尝试过的,但它没有奏效:

'sourceUrl'=>array(
    'company/aclist',
    array("id"=>"js:$('#".CHtml::activeId($model,'company_id')."').val();"),
),

有人对如何实现这一目标有任何其他建议吗?

正确的语法是:

'sourceUrl'=>array(
     "company/aclist", "id"=>"js:$('#".CHtml::activeId($model,'company_id')."').val();")
),

但恐怕有问题。我几乎可以肯定"js:$(.."(将被视为字符串,因此不会被评估。所以我的建议是实施这里提供的解决方案。

该解决方案在这里适用,因为"sourceUrl"调用CHtml::normalizeUrl((,而CHtml::createUrl((又调用CHtml::createUrl((。您需要将"单击"事件更改为"更改"。当然,还有其他一些修改需要完成,但我希望你能解决它们。