【问题标题】:Mojolicious: Passing a Select field HTML FragmentMojolicious:传递选择字段 HTML 片段
【发布时间】:2019-12-17 04:02:34
【问题描述】:

这不是很优雅,但我需要将现有代码粘合到新的 Mojolicious 应用程序上并保持一些向后兼容性。

在旧应用程序中,我有一些数据库记录:

    # hacked in special sql for categories, keep them in order in the drop down
    # 11/7/2011 9999 category number is for folksonomy tags only....
    if ( $table eq 'om_categories' ) {
        my $sqlstring =
"SELECT * FROM om_categories WHERE category != '9999' order by parent,description";
        ( $registry_error, $hash_ref ) =
          sqlraw( $class, $db, $sqlstring, $id, $token );

然后转换成,选择HTML条目,在几个地方使用:

    if ($object eq 'OmYellowpage') {
    my ( $option_string, $count ) =
          collect_items( 'local', $self->session('db'), 'om_categories', '', 'description', 'select', '' );

        my $select_classification = <<EOT ;
 '<select type="required" name="classification"><option value=\"\"></option>$option_string</select>'\n    
EOT

Mojolicious 应用程序中,我想这样做:

$self->stash( 'selectclassification',$select_classification ) ;

但是,从逻辑上讲,这可能是表单中转义的有效文本,而不是我想要的选择:

&lt;optgroup label=&quot; TRANSPORT&quot;&gt;&lt;option value=&quot;1004, 1160,Driving skills&quot;&gt;Driving skills&lt;/option&gt;

我尝试了各种其他 Mojolicious 渲染语法(包括部分渲染语法),但找不到任何当前有效的方法。我不想从根本上重写这一点,因为当前库将失去兼容性。所以我被卡住了,我对 Mojolicious 也比较陌生。

对于好奇的人,this is the old project

【问题讨论】:

  • "..this 在表单中显示为转义的有效文本.." 您能否附上该文本的屏幕截图?预期的结果是什么?
  • 我已按要求添加了输出的示例屏幕截图。
  • 只是一个疯狂的猜测,但是如果您从在 heredoc 中生成的字符串中删除开始和结束单引号会发生什么(或保留引号,并通过丢失将其直接分配给变量heredoc 部分)?
  • 谢谢。在接下来的几天里,我必须专注于其他事情,但我会尝试删除引号。

标签: perl mojolicious


【解决方案1】:

您没有显示您的模板。如果您使用 Mojolicious 模板引擎,请注意默认行为是设置 auto_escape

有关详细信息,请参阅Mojo::Template 文档。

这意味着您必须在模板中使用 %== 来获取隐藏变量的未转义内容:

use Mojolicious::Lite;

get '/',
    sub {
        my $self = shift;
        my $option_string = '  <optgroup id="eu" label="EU">
           <option value="de">Germany</option>
           <option value="en">en</option></optgroup>';
        my $select_classification = <<EOT ;
          '<select type="required" name="classification">
           <option value=\"\"></option>$option_string</select>'\n    
EOT
        $self->stash( 'selectclassification',$select_classification );
        $self->render(template => 'foo');
    };

app->start;

__DATA__

@@ foo.html.ep

    %==  $selectclassification;

您可能还想删除@stevieb 建议的单引号

【讨论】:

  • 谢谢你,我不知道!事实上,我已经尝试删除单引号,但感谢你们俩。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-08
  • 2018-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多