我试图将我已创建动态的textarea转换为Yii2中的 CKEditor 。我使用 2amigos 中的 yii2-ckeditor-widget 。
以下是我如何以表格形式生成Textarea:
$form->field($model, 'answer')
->textarea(['rows' => 5, 'id' => 'textarea_answer'])
->label(false)
生成的textarea是:
<textarea id="textarea_answer" class="form-control" name="topic[answer]" rows="5">
<p>test</p>
</textarea>
然后当我在div中动态添加Textarea时,它可以工作。但在此之后我尝试将Textarea转换为CKEditor:
CKEDITOR.replace('textarea_answer');
或
$( '#textarea_answer' ).ckeditor();
textarea获取Style属性 visibility:hidden 并消失。如下所示:
<textarea id="textarea_answer" class="form-control" name="topic[answer]"
rows="5" style="visibility: hidden;">
<p>test</p>
</textarea>
我在控制台中收到以下错误:
Uncaught TypeError: Cannot read property 'registered' of undefined
我该如何解决?这可能是依赖问题吗?
答案 0 :(得分:0)
对不起。我发现了问题,我动态创建视图的方式不是好方法。我使用 renderPartial 而不是 renderAjax 。
所以我只是直接动态渲染CKEditor。
视图(_view):
<?= $form->field($model, 'answer')
->widget(CKEditor::className(),
[
'options' => ['rows' => 5, 'id' => 'textarea_answer'],
'preset' => 'custom',
'clientOptions' => [
'extraPlugins' => 'codesnippet',
'toolbarGroups' => [
['name' => 'undo'],
['name' => 'basicstyles', 'groups' => ['basicstyles', 'cleanup']],
['name' => 'colors'],
['name' => 'links', 'groups' => ['links', 'insert']],
['name' => 'others', 'groups' => ['others', 'about']],
['name' => 'codesnippet']
]
]
])->label(false);
?>
以及我在Controller中呈现它的方式:
echo $this->renderAjax( '_view', ['model'=> $model] );
我正在使用renderPartial。这就是为什么它不起作用。