如何在没有逗号或命令的情况下向Play模板添加参数?

时间:2014-06-24 15:49:50

标签: scala playframework

我想知道如何改进我自己的模板助手。例如,我创建了一个autocomplete.scala.html接收参数以便动态化,例如:

@autocomplete("elementLabel","data-url-where-its-going-to-get-JSON-data","anyother","etc","foo")

然后我可以在我想要的任何页面中使用autocomplete组件。

但我想知道如何让它更容易使用,例如,Play的inputText助手可以选择使用" ' " + parametername然后 - > (可能是lambda?)所以,我怎么能实现它,所以,我可以,例如做出类似的东西:

@autocomplete("data-url",'someattribute->"value", '_anotherOneWithUnderscoreWhyBtw->"whyunderscore") 

autocomplete.scala.html

@**
*   Componente para pesquisa textual e sele��o de registro de relacionamento 1 para N
*   
*   Example:
*
*   @autocomplete("example.nested.id", "Unidade", "/sistema/buscarExemplo", myForm.get().getUnidade.getId.toString, myForm.get().getUnidade.getLabel.toString) 
*@

@(fieldId: String, fieldTitle: String, dataUrl: String, initIdValue: String, initTitleValue: String)

    <div class="form-group">
        <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12">
        <label for="@fieldId" class="control-label">@fieldTitle</label>
        </div>
        <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12">
        <span class="input-icon input-icon-right" style="width:100%">
            <input type="text" class="autocomplete-relation" 
            name="@fieldId" 
            data-url="@dataUrl" 
            data-id-status="@fieldTitle" 
            data-init-id-value="@initIdValue"
            data-init-nome-value="@initTitleValue"
            style="width:100%"
            />
            <i id="response_@fieldTitle" class="icon-search blue"></i>
        </span>
        </div>
    </div>

一旦出现新要求,我必须再添加一个参数,然后在我称之为的所有页面上修改它。我想在播放时使用该原始复选框,例如:

@checkbox(myForm("myField"),'_label ->"MY_LABEL", 'class->"MYCLASS")

 OR

@checkbox(myForm("myField"),'class ->"MYCLASS",'_label->"MY_LABEL")

 or even

@checkbox(myForm("myField"),'class ->"MYCLASS",'_label->"MY_LABEL",'anotheattribute->"VALUE")

等等。我怎么能这样做,所以我不必填写所有这些,订单也不重要?

1 个答案:

答案 0 :(得分:0)

您可以使用重复的(String, String)元组作为最后一个参数:

@(fieldId: String, fieldTitle: String, data: (String, String) *)

<div class="form-group">
    <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12">
    <label for="@fieldId" class="control-label">@fieldTitle</label>
    </div>
    <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12">
    <span class="input-icon input-icon-right" style="width:100%">
        <input type="text" class="autocomplete-relation" 
        name="@fieldId" 
        data-id-status="@fieldTitle" 
        @data.map{ case (key, value) => 
            @{key}="@{value}"
        }
        style="width:100%"
        />
        <i id="response_@fieldTitle" class="icon-search blue"></i>
    </span>
    </div>
</div>

你会按照你想要的方式来称呼它:

@autocomplete("someId", "someTitle", "data-url" -> "google.com", "data-attr" -> "someValue")

您还可以使用Map[String, String]

@(fieldId: String, fieldTitle: String, data: Map[String, String])

模板的其余部分将保持不变,但你会传递这样的内容:

Map[String, String](
    "data-url" -> "google.com",
    "data-field-something" -> "value"
)