我正在使用Zend,我们有一个通过一系列功能组合在一起的表单。其中一个特别是addMultiOption,其中一个是从数据库中引入的(我不知道,如果我可以改变查询,那将会更容易和更好。无论如何,我说我需要添加一个“rel”属性为每个选项/选项所以我可以选择该选项时通过jquery在选项上执行任务,它不是所有选项,而是一些没有额外功能的选项将具有0,其中作为具有动作的选项这将来自数据库的“一个”。我试图弄清楚如何在值之外添加额外的属性
Zend Framework是否支持此功能,如果不支持,我该如何实现?我之前发现了我认为这篇文章不错的帖子,但事实证明它对我不起作用
答案 0 :(得分:5)
使用addMultiOption($ value,$ label)我只需将value参数设置为:
$value = $id . '" ref="' . $ref;
当它呈现时:
<option value="<idValue>" ref="<refValue"><labelValue></option>
希望这会有所帮助......
好的,值被转义,但是optionClasses在添加addMultiOptions(val,lable)的循环中没有这样做我做了这样的事情:
$optionClasses[<val>] = 'ref_' . <val> . '" ref="' . <ref>;
然后在循环之后只做一个setAttrib('optionClasses',$ optionClasses)
这实际上有效......
所以这里有一个例子,我将定义一个数组,该数组可能是来自db查询的记录集,其中包含我们将要使用的三个部分; id,代码和偏移量
$records = array( array('id' => 1, 'code' => 'Code 1', 'offset' => 4),
array('id' => 2, 'code' => 'Code 2', 'offset' => 5),
array('id' => 3, 'code' => 'Code 3', 'offset' => 6)
);
我将在表单元素定义(在扩展Zend_Form的类中)中使用它来进行选择,其中选项具有名为“offset”的属性,该属性将具有来自数组的“offset”值
$e = $this->createElement('select', 'code_id');
$e->setLabel('Event Type:')
->setAttrib('size', 1);
$optionClasses = array();
foreach ($records as $record) {
$optionClass = 'xcode_' . $record['id'] . '" xoffset="' . $record['offset'];
$optionClasses[$record['id']] = $optionClass;
$e->addMultiOption($record['id'],$record['code']);
}
$e->setAttrib('optionClasses', $optionClasses);
$this->addElement($e);
当渲染它时,它会产生一个像
这样的选择元素<select name="code_id" id="code_id">
<option value="1" class="xcode_1" xoffset="4" selected="selected">Code 1</option>
<option value="2" class="xcode_2" xoffset="5">Code 2</option>
<option value="3" class="xcode_3" xoffset="6">Code 3</option>
</select>
然后你可以使用
获得jQuery所选选项的偏移量 var xoffset = $("#code_id").find("option:selected").attr("xoffset");
这是有效的,因为optionClasses结果类属性不会像value属性那样被渲染方法转义。