YII2其他放射学家的依赖性放射学家

时间:2015-12-15 14:10:43

标签: yii2 yii2-advanced-app yii2-basic-app yii2-user yii2-model

我有两张桌子,如下所示。

tbl_tests:

id | testname | description

tbl_testitems:

id | itemname | description | testid

我需要为他们两个使用radiolist,这样当我选择radiolist进行测试时,只会显示所选的testitem列表。这是我的代码:

<?=
$form->field($model, 'labtestid')->radioList(
        ArrayHelper::map(Labratorytest::find()->orderBy('testName')->all(), 'testid', 'testName'), [
    'onchange' => '$.post( "index.php?r=labratorytestitem/lists&id=' . '"+$(this).val(), function(data){
      $( "select#suggesttest-labtestitemid" ).html( data );
    });'
    , 'return' => true], ['id' => 'test'])->label('');
?>

<?=
$form->field($model, 'labtestitemid')->radioList($allItemsArray, ['return' => true])->label('')
?>

testItemsController 中的 actionLists 方法是

public function actionLists($id) {
    $countItems = \app\models\Labratorytestitem::find()->where(['testid' => $id])->count();
    $testItems = \app\models\Labratorytestitem::find()->where(['testid' => $id])->all();
    $mymodel = new \app\models\Suggesttest();
    if ($countItems > 0) {
        foreach ($testItems as $item) {
            echo '<input type="radio" name="' . $item->itemName . '" value="' . $item->itemid . '>';
        }
    } else {
        echo ' ';
    }
}

但是当我选择radiolist时,它没有显示所选测试中的项目。请帮我!在此先感谢!!!

1 个答案:

答案 0 :(得分:0)

我认为您在代码中犯了一些错误。首先,您要混合postget个请求。您的onchange活动正在触发post请求,但您尚未指定要发送的任何数据。您的控制器正在等待get请求,但没有收到请求。你没有告诉yii在回显你的数据后结束,并且控制器名称看起来不对,这是一个错字吗?

无论如何,请尝试此代码。我已经建议了一些代码简化,以便于阅读。

在您的视图文件中;

<?=
//Note the url, as you asked for it, is to a controller called `laboratorytestitem`, not `testitems` as you've called the controller
$url = Url::to(['/laboratorytestitem/lists', 'id' => $model->id]);
$js = <<<JS
    $(#suggesttest-labtestid).on('change', function(){
        $.get($url, function(data){
            $( "select#suggesttest-labtestitemid" ).html( data );
        })
    });
JS
$this->registerJs($js);

$form->field($model, 'labtestid')->radioList(
        ArrayHelper::map(Labratorytest::find()->orderBy('testName')->all(), 'testid', 'testName'), ['return' => true, 'id' => 'test'])->label('');
?>

现在,在名为laboratorytestitem的控制器中,您将有一个操作lists

public function actionLists($id) {
    $testItems = \app\models\Labratorytestitem::find()
        ->where(['testid' => $id])
        ->all();
$count = count($testItems);
$output = '';
    if ($count > 0) {
        foreach ($testItems as $item) {
            $output .= '<input type="radio" name="' . $item->itemName . '" value="' . $item->itemid . '>';
        }
    }
    echo $output;
    Yii::$app->end();
}

当您运行代码时,请检查浏览器上控制台的输出,以确保它找到正确的URL,并确保发送的数据符合您的预期,并且服务器的响应是什么你期待。这样你就可以指出任何问题。