当通过ajax请求时,Yii2 CKeditor未初始化

时间:2015-09-29 11:40:31

标签: php jquery ajax ckeditor yii2

我正在尝试使用通过CKeditor请求嵌入的AJAX小部件添加from。请求本身工作正常,并返回我想要的一般局部视图。除Ckeditor窗口小部件外,将返回普通文本框。

当项目被添加到组并重新加载页面时,将呈现相同的partialView(在foreach中包含所有group-items),这次CKeditor很好地到位。

发布我的控制器,初始化下面的CKeditorScipt with AJAX请求。 (CKeditor视图中包含_ContentItemHtml

我查看了this,但我无法调用CKeditor中的任何JS函数,因为它是作为窗口小部件加载的。

控制器操作

public function actionCreateHtml($contentitemgroupid)
{
    $model = new ContentItemHtml();
    if (isset(Yii::$app->request->post()['ContentItemHtml'])) {
        $item = Yii::$app->request->post()['ContentItemHtml'];
        $model->contentitemgroupid = $contentitemgroupid;
        $model->title = $item['title'];
        $model->body = $item['body'];
        $model->save();
        // return $this->redirect(['edit', 'id' => $model->contentitemgroupid]);
    }
    else
        return $this->renderPartial('_ContentItemHtml', ['model' => $model]);
}

视图中的有效表单:

echo $form->field($model, 'body')->widget(CKEditor::className(), [
    'preset' => 'custom',
    'clientOptions' => [
        'height' => 200,
        'toolbarGroups' => [
        ['name' => 'basicstyles', 'groups' => ['basicstyles', 'cleanup']],
        ['name' => 'paragraph', 'groups' => ['templates', 'list']],
        ['name' => 'mode']]
    ]])->label(false);

的script.js

$('#addNewContentItem').on('click', function (e) {
  e.preventDefault();
  var url = 'create-' + $('#itemSelector').val().toLowerCase() + '?contentitemgroupid=' + $('#itemSelector').attr('contentitemgroupid');
  $.ajax({
    type: 'POST',
    url: url,
    cache: false,
    success: function(res) {
      $('.contentItemsManager').append('<div class="ContentItemContainer row">' + res + '</div>');
      AddSaveEventListener();
      AddSaveMediafileEventListener();
      AddRemoveEventListener();
    }
  });
});

1 个答案:

答案 0 :(得分:4)

使用renderAjax代替renderPartial。来自文档:

  

[renderAjax]呈现视图以响应AJAX请求。

     

此方法类似于renderPartial(),除了它将使用JS / CSS脚本和向视图注册的文件注入到渲染结果中。因此,您应该使用此方法而不是renderPartial()来呈现视图以响应AJAX请求。