2017-03-15 10 views
2

私は自分のHTMLコンテンツを別の部分に分割したいので、別のページで簡単に組み合わせることができます。言って、エラーをコンパイル取得Binding.scalaを使用してHTMLコンテンツを部分的に分割する方法は?

object App extends JSApp { 
    @dom def title2() = { 
     <!-- Title 2 --> 
     <h2>Title 2</h2> 
     <!-- End Title 2 --> 
    } 

    @dom def render() = { 
     <h1>Title 1</h1> 
     { title2.bind } 
     <h3>Title 3</h3> 
    } 

    @JSExport def main(): Unit = { 
     dom.render(document.getElementById("app"), render) 
    } 
    } 

:私はこのようにコーディングしてみました

App.scala:23: org.scalajs.dom.html.Heading does not take parameters 
[error]    { title2.bind } 
[error]   ^
[error] one error found 
[error] (compile:compileIncremental) Compilation failed 

その後、私は1回の警告で成功をコンパイル

@dom def render() = { 
     <h1>Title 1</h1> 

     { title2.bind } 
     <h3>Title 3</h3> 
    } 

TITLE1とTITLE2の間で1つの空の行を追加します。 :

App.scala:24: a pure expression does nothing in statement position; multiline expressions might require enclosing parentheses 
[warn]    { title2.bind } 
[warn]     ^
[warn] one warning found 

htmlファイルを開くと、title1とtitle2の両方が見つからないことがわかります。ページにはtitle3しかありません。

私はscalaとBinding.scalaが新しく、なぜこれが起こるのかわかりません。

あなたはそれがあなたのコードだScalaFiddle

答えて

0

にテストしようとすることができます見ての通り、

<h1>Title 1</h1>{ title2.bind }; 
<h3>Title 3</h3>; 

Scalaのコンパイラを:

<h1>Title 1</h1> 
{ title2.bind } 
<h3>Title 3</h3> 

Scalaのコンパイルは、上記のコードを同じに解析されました<h1>Title 1</h1>を関数として扱い、引数title2.bindで呼び出してください。

ただし、タイプがorg.scalajs.dom.html.Heading<h1>Title 1</h1>は呼び出し可能ではありません。

org.scalajs.dom.html.Heading does not take parameters 

これは、エラーメッセージが表示される理由です。

あなたはリテラルXMLでそれらのすべてをラップすることにより、エラーを回避することができます

<div> 
    <h1>Title 1</h1> 
    { title2.bind } 
    <h3>Title 3</h3> 
</div> 
関連する問題