2016-02-16 51 views
0

我正在開發一個scalajs-react項目,但我無法獲得以下內容來進行類型檢查。相關文件是herehere獲取案例類而不是dynRenderR中的特質


我的頁面是:

sealed trait Pages 
case class Product(id: String) extends Pages 

我的路線定義爲:

dynamicRouteCT("#product"/string("[a-zA-Z0-9]+") 
    .caseClass[Product]) ~> dynRenderR((page, ctl) => ProductPage(page, ctl)) 

的問題是,dynRenderR組件返回Pages型,當我真正需要的價值類型Product的值爲了訪問id屬性,其中Pages特徵沒有。

產品頁面:

case class Props(routeData: Product, ctl: RouterCtl[Pages]) 

class Backend($: BackendScope[Props, Unit]) { 
    def render(props: Props) = <.div("Product view " + props.routeData.id) 
} 

def apply(product: Product, ctl: RouterCtl[Pages]): ReactElement = 
    component(Props(product, ctl)) 

private val component = ReactComponentB[Props]("Product") 
    .renderBackend[Backend] 
    .build 

奇怪的是,這個編譯和運行沒有問題;它的IntelliJ它與抱怨:

Type mismatch, expected: Product, actual Pages 

我怎樣才能修改或正確地利用dynRender成分通過一個產品,而不是一個網頁,或可以在不使用這種方式?

回答

2

奇怪的是,這個編譯和運行沒有問題; intellij抱怨[...]

Unfortunatley,Intellij的編譯/錯誤報告並不完美,尤其是在宏的存在。雖然我不知道scalajs-react的細節,但您可以放心,如果您的代碼編譯並運行良好,您只會看到一個Intellij錯誤。

因此,所有你能做的就是:

  • 與它共處或
  • 文件中的錯誤。

對不起,我沒有更好的消息。

+0

雖然它看起來像是一個有效的類型錯誤。如果一個產品被傳遞到期望頁面的地方,那就沒問題了,反之,一個頁面不能完成產品所能做的所有事情,所以這是一個類型錯誤。所以我不明白爲什麼這是編譯。 – soote

+1

在調用'dynamicRouteCT'的過程中,您明確指出您的參數應該被解析爲Product:'.caseClass [Product]'。這會傳播給對'dynRenderR'的調用。 – gzm0

+0

這很有道理,謝謝! – soote

相關問題