2015-07-18 2 views
4

Я пытаюсь оказать ListView с помощью AJAX, но он дает мне следующую ошибку:Yii2 renderAjax вложенная ListView

Exception (Invalid Configuration) 'yii\base\InvalidConfigException' with message &#039 
;The "dataProvider" property must be set. 

Контроллер:

public function actionLoadListviewAjax() 
{ 
    $dataProvider = // call to a function which returns ArrayDataProvider 
    return $this->renderAjax('myview', [ 'dataProvider' => $dataProvider ]); 
} 

Вид:

echo ListView::widget([ 
     'dataProvider' => $dataProvider, 
     'itemView'  => 'items', 
     'options' => ['class' => 'list-view-post'], 
     'summary' => '', 
     'emptyText' => '', 
    ]); 

$ dataProvder:

<pre>yii\data\ArrayDataProvider Object 
(
    [key] => 
    [allModels] => Array 
     (
      [0] => Array 
       (
        [RecommendationCategory] => 
        [ID] => 37 
        [GUID] => 
        [Title] => test 
        [WallPostTypeID] => 1 
        [RecommendationCategoryID] => 0 
        [CommentsJSON] => 
        [TotalComments] => 
        [PostedMessage] => test 
        [FirstName] => test 
        [LastName] => test 
        [ProfileImagePath] => Lighthouse.jpg 
        [AddedOn] => 2015-07-18 15:14:06 
        [ImagePath] => 
        [CommentProfileImagePath] => 
        [IsSubscribe] => 1 
       ) 

     ) 

    [id] => 
    [_sort:yii\data\BaseDataProvider:private] => 
    [_pagination:yii\data\BaseDataProvider:private] => 
    [_keys:yii\data\BaseDataProvider:private] => 
    [_models:yii\data\BaseDataProvider:private] => 
    [_totalCount:yii\data\BaseDataProvider:private] => 
    [_events:yii\base\Component:private] => Array 
     (
     ) 

    [_behaviors:yii\base\Component:private] => 
) 

Я попытался renderPartial также, но все та же ошибка. Любые идеи, почему это дает освобождение?

Update:

В моем itemView файле items У меня есть другой ListView, для которых она дает исключение.

ответ

1

Фактически элемент представления списка не имеет доступа к внешним переменным, которые были отправлены через виджетов. Однако, если вам нужно использовать переменную $dataProvider в вашем внутреннем файле просмотра, попробуйте использовать вызываемые для отображения элементы в вашем списке.

что-то вроде этого:

`` `

echo ListView::widget([ 
    'dataProvider' => $dataProvider, 
    'itemView'  => function ($model, $key, $index, $widget) { 
     return $this->renderAjax('items', [ 
      'dataProvider' => $widget->dataProvider, 
     ]); 
    }, 
    'options' => ['class' => 'list-view-post'], 
    'summary' => '', 
    'emptyText' => '', 
]); 

` ``

более

информация здесь

http://www.yiiframework.com/doc-2.0/yii-widgets-listview.html# $ itemView-деталь

Смежные вопросы