1

スカラディンアドオンでvaadinを使用しているim&クラス拡張vaadin.scala.CustomComponent

class CostPlanImport extends CustomComponent {
    var root: Panel = _
    // ..
}

ここで、クラスのcom.vaadin.ui.Componentクラスのattachメソッドをオーバーライドし、そのメソッドのクラスプロパティ(root、..)にアクセスします。

どのように私はしなければなりませんか?

ありがとう。

4

1 に答える 1

4

CustomComponentソースからわかるように

class CustomComponent(override val p: com.vaadin.ui.CustomComponent with
    CustomComponentMixin = new com.vaadin.ui.CustomComponent with 
    CustomComponentMixin
) extends AbstractComponent(p) {
    ... inner code
}

対応するvaadinコンポーネントをcontructor引数p(通常は「peer」を表す)として渡します。

つまり、scaladinコンポーネントは、元のコンポーネントのラッパーです。

ピアコンポーネントの動作をオーバーライドするには、ラッパーコンストラクターに渡すときにオーバーライドする必要があります。

ここにはさまざまな選択肢があります


匿名サブクラス付き

class CostPlanImport(override val p: com.vaadin.ui.CustomComponent with CustomComponentMixin =
    new com.vaadin.ui.CustomComponent {
        def attach() {
            //your code here
        } with CustomComponentMixin
) extends CustomComponent(p)

特徴を持って

trait AttachBehavior {
    self: com.vaadin.ui.Component =>
      def attach() {
         //your reusable code here
      }
}

class CostPlanImport(override val p: com.vaadin.ui.CustomComponent with CustomComponentMixin =
    new com.vaadin.ui.CustomComponent 
        with CustomComponentMixin
        with AttachBehavior
) extends CustomComponent(p)

CustomComponentサブクラス付き

[表示されていませんが、前の2つの例を組み合わせたものです]


注:コード例はテストされていません


アップデート

「ラッパーコンポーネント」コンストラクターからピアのメソッドにパラメーターを渡す必要がある場合は、次のことができます。

class CostPlanImport(
    name: String,
    cost: Double,
) extends CustomComponent( p = 
    new com.vaadin.ui.CustomComponent {
        def attach() {
            //your code here
            //with "name" & "cost" visible
        } with CustomComponentMixin
)
于 2012-12-11T11:41:22.647 に答える