我想把tu放一个初始值。 我已经看到quicksearch有'q'元素,但我无法访问它,例如,这找不到q元素:
$quickSearch->getElement('q');
如何访问quicksearch以设置初始值?
答案 0 :(得分:1)
查看它的来源可以帮助您找到答案。 Agile Toolkit的设计方式是开发人员应该利用源代码的知识。
QuickSearch派生自Filter,派生自Form,因此应该在某处添加addField。查看QuickSearch,您将在recallAll()函数中找到它。没有调用这个函数所以我们应该查看父类 - Filter。
Filter在api中设置一个钩子,在初始化完成后调用recallAll。这意味着能够访问该字段,您可以重新定义方法或自己添加一个钩子。
<强>钩:强>
$this->api->addHook('post-init',function() use($quickSearch){
$quickSearch->getElement('q')->set('hello');
});
<强>扩展强>
class MyQuicksearch extends QuickSearch {
function recallAll(){
parent::recallAll();
$this->getElement('q')->set('hello');
}
}
最后,您可以利用了解recallAll从哪里加载默认值,并简单地执行此操作:
$quicksearch->memorize('q','hello');
答案 1 :(得分:0)
要解决这个问题,首先要了解如何将QuickSearch类的搜索字段添加到Grid Basic类中。所以在调查源代码后,我们可以看到:
q
q
仅添加在网格的渲染阶段 了解这些,我们现在可以继续将修改添加到地址项#1。
首先,我们需要添加一个变量来跟踪QuickSearch类中的Form_Field q
:
var $search_field=null; // add this line (1)
function recallAll(){
$ff=$this->addField('line','q','');
$this->search_field=$ff; // and this line (2)
parent::recallAll();
:
:
}
第二,为了解决项目#2,在我们定义网格的页面上,我们需要添加一个后续钩子,例如:
class page_gridsearchtest extends Page {
var $search=null;
function init() {
parent::init();
$g = $this->add('MVCGrid');
$g->setModel('Employees');
if($g){
$this->search=$g->addQuickSearch(array('fullname'));
if($this->search)
$this->api->addHook('post-init',array($this,'MyHook')); // add hook
}
}
function MyHook(){ // hooked method
if($this->search->search_field) {
if($this->search->search_field->get()=='')
$this->search->search_field->set('Juan'); // set initial search if blank
$this->search->search_field->setCaption('Employee Name Search');
}
}
}
这将在QuickSearch字段旁边设置 CAPTION ,如果搜索字段为空,则添加 DEFAULT 搜索文本。
如果这只是一次性事情,那么这可能是一个快速解决方案,因为直接对库源进行更改是非常不正统的,并且不遵循由ATK推广的扩展和子类的OOP概念