0

У меня есть этот шаблон Play, dynamicLink.scala.html ...Play рамка шаблон не может избежать URL

@(urlWithQuotes: Html, id: Html, toClick: Html) 

@uniqueId_With_Quotes() = { 
    Html("\"" + (@id) + "_" + scala.util.Random.nextInt.toString + "\"") 
} 

@defining(uniqueId_With_Quotes()) { uniqueID => 
    <a [email protected] class="dynamicLink" [email protected]> @toClick </a> 

    <script><!--Do stuff with dynamic link using jQuery--></script> 
} 

Это создает особую связь с некоторым JavaScript. Оказываю эту ссылку, как так ...

@dynamicLink(
    Html("@{routes.Controller.action()}"), 
    Html("MyID"), 
    Html("Click Me") 
) 

Когда я сделать это, я получаю ...

<a id= 
Html("\"" + (MyID) + "_" + scala.util.Random.nextInt.toString + "\"") 
class="dynamicLink" [email protected]{routes.Controler.action()}> Click Me </a> 

Это не то, что я хочу сделать. Я хочу это сделать ...

<a id="MyID_31734697" class="dynamicLink" href="/path/to/controller/action"> Click Me </a> 

Как сделать этот HTML-код корректным?

* Возьмите # 2 - замена Html Params с Последовательностью *

@(urlWithQuotes: String, id: String, toClickOn: String) 

@uniqueId_With_Quotes() = { 
    Html("\"" + (@id) + "_" + scala.util.Random.nextInt.toString + "\"") 
} 

@defining(uniqueId_With_Quotes) { uniqueID => 
    <a [email protected] class="dynamicLink" [email protected]> @toClickOn </a> 
    ... 
} 

С ...

@dynamicLink2(
"@{routes.Controller.action()}", 
"MyID", 
"Click Me" 
) 

Оказывает ...

<a id= 
    Html("\"" + (MyID) + "_" + scala.util.Random.nextInt.toString + "\"") 
class="dynamicLink" [email protected]{routes.Controller.action()}> Click Me </a> 
    <script> 
     ... 
    </script> 

* Изменение Html для строки не работает *

* Обратите внимание, что "@uniqueId_With_Quotes()" расширяется в "Html (" \ "" + (MyID) + "_" + scala.util.Random.nextInt.toString + "\" ") ". Я хочу, чтобы он фактически выполнял конкатенацию строк. *

Кроме того, это должно быть очевидно, но я хочу, чтобы каждая ссылка и сопровождающий jquery отображались с идентификатором, который является уникальным для этой ссылки, и я не хочу, чтобы диспетчеру приходилось беспокоиться о назначении этих уникальных идентификаторы. Мой способ сделать это заключается в добавлении случайного числа к каждому идентификатору (хотя для представления может быть лучше). Мне нужно, чтобы это поведение с состоянием в представлении, потому что мне нужно, чтобы «dynamicLink» был полностью прозрачным для контроллера.

ответ

0

Вы пытались использовать переменные как типы строк?

@(urlWithQuotes: String, id: String, toClick: String) 
+0

Изменение Html на String не сработало. Кроме того, я не знаю, когда я должен использовать Html, и когда я должен использовать String (вне пользовательских форм, которые всегда должны использовать String только для защиты от повторной инъекции) –

0

Я нахожу решение. Вы должны передать объект вызова.

@dynamicLink(
    ({routes.Controller.action()}), 
    "MyID", 
    "Click Me" 
    ) 

Передайте эти параметры в ...

@(urlNoQuotes: Call, id: String = "", toClickOn: String = "") 

@uniqueId_With_Quotes() = @{ 
    Html("\"" + (id) + "_" + scala.util.Random.nextInt.toString + "\"") 
} 

@url() = @{ 
    Html("\"" + urlNoQuotes + "\"") 
} 

@defining(url()) { processedURL => 
    @defining(uniqueId_With_Quotes()) { uniqueID => 
    ... 
    } 
} 

^Теперь она работает.

 Смежные вопросы

  • Нет связанных вопросов^_^