2014-06-23 90 views
0

我一直在为此工作很长一段时间,我无法理解我做错了什么(yii初学者,所以请向我展示一些耐心)。Yii Cgridview更新功能不起作用

我有这样的代码在我看来代码

echo CHtml::dropDownList('symptomCategory', 
             '',   // selected item from the $data 
            $this->getSymptomCategories(), 
             array(
               'id'=>'categorySelectDropDown', 
               'prompt'=>"Select Symptom Category", 
              )); 





    $this->widget('zii.widgets.grid.CGridView', array(
      'id'=>'symptoms-grid', 
      'selectableRows'=>1, //ability to select one symptom at a time 
      'dataProvider'=>$model2->search(), 
      //'htmlOptions'=>array('id'=>'symptomsSelectGrid'), 
      'columns'=>array(
       'symptomCode', 
       'title', 
       'inclusions', 
       'exclusions', 
       'symptomCategory', 

      ), 
    )); 

我的js函数是这样的:

$('#categorySelectDropDown').change(function() 
     { 
      var symptomCategory = $('#categorySelectDropDown').val(); 

      $('#symptoms-grid').yiiGridView('update', 
      { 
       data: symptomCategory.serialize() 
      }); 
      return false; 
     }); 

我用$(本).serialize()也试过。无论如何。

根据我在网上找到的例子,它应该可以工作,但是不会,它不会更新cgridview。 $ this-> getSymptomCategories()返回一个数组的数组('A'=>'A','B'=>'B'等等等等)

顺便说一句我正在创建一个model2 = new症状;在由不同模型的控制器呈现的视图中,因为我想使用gridview中的选择来填充另一个模型的表单。任何帮助,文档(没有发现任何有用的在线),建议等将非常感激。感谢您oyur时间

+0

我发现了这个问题。 gridview的ajax更新网址是朝着控制器呈现它(在这种情况下是sympomtshistorycontroller,因为正如我所说我想使用生成的网格视图,以便用户可以使用它来选择搜索症状),但gridview是症状模型。所以我所做的是我在渲染的局部视图内创建了一个新的sympptoms模型($ model2 = new Symptoms;),这打破了MCV架构......问题是我不知道如何解决它,因为我确实需要在属于另一个控制器的视图内渲染症状的gridview ...希望有人可以提供帮助。 –

回答

1

尝试更新yiiGridView

这种方式
$.fn.yiiGridView.update('symptoms-grid', { 
     data: $('#symptomCategory').serialize() // your form id 
}); 

可以有很多原因,yiiGridView好像它没有更新,对他们是AJAX请求没有被发送,另一个常见的原因是搜索条件逻辑不正确,或者请求的操作不会将发布的数据传递给模型,导致返回相同的数据,使其看起来像没有更新。

查看AJAX请求是否从萤火虫/控制台等进入服务器。如果它正在进行,然后检查后数据是否正确,最后检查模型+控制器逻辑是否正确,并且CActiveDataProvider的标准反映了您的搜索条件

+0

不会改变任何东西:/ –

+0

嘿看到我更新的答案.. – Manquer

+0

谢谢,我还没有找到解决方案,但你已经帮助我更好地理解它。无论如何,没有AJAX请求发生。 –