質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.53%

  • HTML5

    4966questions

    HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

  • Scala

    209questions

    ScalaはJava仮想マシンで動作を行うオブジェクト指向型プログラミング言語の1つです。静的型付けの関数型言語で、コンパイルエラーの検出に強みがあります。

Scala.handlebarsで自作したヘルパーでBooleanを返したい

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 460

Buakaw

score 227

ScalaHandlebarsを使用しています。
このサイトを見ながらヘルパーを自作したのですが、ヘルパーからはStringしか返せないと記述があり実際に作成しメソッドからBoolenaを返そうとしたらエラーになりました。

やりたいこととしては、

  1. 引数を取得
  2. 値が存在しなければtrueを返す

のような実装です。

http://d.hatena.ne.jp/Kazuhira/20140920/1411202608

実装したコード

import com.gilt.handlebars.scala.binding.dynamic._
import com.gilt.handlebars.scala.Handlebars
import com.gilt.handlebars.scala.helper.{Helper, HelperOptions}
import com.gilt.handlebars.scala.binding.{Binding, BindingFactory}

class MyHelper[T] extends Helper[T] {
    override def apply(binding: Binding[T], options: HelperOptions[T])(implicit contextFactory: [T]): Boolean = {
        val arg = options.argument(0).getOrElse("MyHelper".asInstanceOf[T])
        sample.length match{
          case 0 => { true }
          case _ => { false }
        }
    }
}
object Sample {
    def main(args: Array[String]): Unit = {
        val html =
            """
              | <html>
              | <head></head>
              | <body>
              | <p>{{sample}}</p>
              | <p>{{#my sample}}{{/my}}</p>
              | </body>
              | </html>
            """.stripMargin.mkString
        val handle = Handlebars(html)
        println(handle(
            Map("sample"->"sampleText"),
            helpers = Map("my"->new MyHelper)
        ))
    }
}


実行結果

[error] /Code/service/PdfLayoutService.scala:19: overriding method apply in trait Helper of type (binding: com.gilt.handlebars.scala.binding.Binding[T], options: com.gilt.handlebars.scala.helper.HelperOptions[T])(implicit contextFactory: com.gilt.handlebars.scala.binding.BindingFactory[T])String;
[error]  method apply has incompatible type
[error]     override def apply(binding: Binding[T], options: HelperOptions[T])(implicit contextFactory: BindingFactory[T]): Boolean = {
[error]                  ^
[error] one error found
[error] (compile:compileIncremental) Compilation failed
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

Booleanは返せません。テキスト情報しか返せません。仕様です。(Handlebarsの裏側のコードを追いました。)なので、評価の結果falseであれば空文字を返すような実装にしました。trueであれば、{{#my sample}} {{/my}}で囲まれているエリアの文字列を返すような仕様にしました。取得出来るメソッドが有ります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • HTML5

    4966questions

    HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

  • Scala

    209questions

    ScalaはJava仮想マシンで動作を行うオブジェクト指向型プログラミング言語の1つです。静的型付けの関数型言語で、コンパイルエラーの検出に強みがあります。