我正在尝试在敏捷工具包中使用自动完成插件(我对此仍然很陌生,但它似乎非常适合我的需求)。Autocomplete Basic 可以工作,但是当我使用 Plus 并按下加号按钮时,我收到一个错误,连接到没有模型集。在 Plus 源中应该使用自我模型 - 但我不明白我应该如何设置自动完成表单的模型。
这是堆栈跟踪的重要部分,我认为:
- Frontend_page_form: Form->setModel(Null)
- Frontend_createquestions_form_question_id: autocomplete\Form_Field_Plus->autocomplete{closure}(Object(Page))
这是我的模型:
class Model_QuestionInCollection extends Model_Table {
public $entity_code='questionincollection';
function init(){
parent::init();
$this->hasOne('Question')->display(array('form'=>'autocomplete/Plus'));
这是代码:
$form=$this->add('Form');
$form->setModel('QuestionInCollection');
- - 编辑
我最终在自动完成中更改了模型,现在它可以工作了,表明原来的“$self->model”有问题——但当然不能一概而论。我做了一些额外的更改(使新记录显示在自动完成字段中),所以现在自动完成/加号是这样的:
<?php
namespace autocomplete;
class Form_Field_Plus extends Form_Field_Basic
{
function init()
{
parent::init();
$self = $this;
$f = $this->other_field;
// Add buttonset to name field
$bs = $f->afterField()->add('ButtonSet');
// Add button - open dialog for adding new element
$bs->add('Button')
->set('+')
->add('VirtualPage')
->bindEvent('Add New Record', 'click')
->set(function($page)use($self) {
$model=$this->add('Model_Question');
$form = $page->add('Form');
$form->setModel($model); //Was: $self->model
//Would be nice if it worked...: $form->getElement($model->title_field)->set($self->other_field->js()->val());
if ($form->isSubmitted()) {
$form->update();
$js = array();
$js[] = $self->js()->val($form->model[$model->id_field]);
$js[] = $self->other_field->js()->val($form->model[$model->title_field]);
$form->js(null, $js)->univ()->closeDialog()->execute();
}
});
}
}