YII2 依赖于其他电台列表的电台列表

Posted

技术标签:

【中文标题】YII2 依赖于其他电台列表的电台列表【英文标题】:YII2 Dependent radiolist on other radiolists 【发布时间】:2015-12-15 14:10:42 【问题描述】:

我有两张表,如下图。

tbl_tests:

id | testname | description

tbl_testitems:

id | itemname | description | testid

我需要为他们两个都使用一个单选列表,这样当我为测试选择单选列表时,只会显示所选中的 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】:

我认为您在代码中犯了一些错误。首先,您混合了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,发送的数据是您所期望的,并且服务器的响应是您所期望的。这样您就可以查明任何问题。

【讨论】:

以上是关于YII2 依赖于其他电台列表的电台列表的主要内容,如果未能解决你的问题,请参考以下文章

手机端ios和android浏览器 如何实现mms广播电台在线音频播放?

手机版网易云音乐怎么把下载了的电台节目添加到歌单里

网易云音乐Java版爬虫

跟随其他大公司步伐 Microsoft放弃手枪表情符

基于微信小程序的个人电台系统的设计与实现

怎么用iphone6充当一个电台频道