2011-08-04 10 views
3

スクロールダウンしたときにajaxを介してアイテムを追加するリピーターコンポーネントはありますが、モデル内のすべてのアイテムを保持することはできませんか? 「もっと見る」をクリックすると、Facebookのようなものが表示されます。Wicket:下にスクロールしたときにアイテムを追加するリピーターコンポーネントですか?

つまり、現在のコンテンツを気にせずにコンポーネントに追加するにはどうしたらいいですか?

注:私は、テーブルだけでなく、一般的な解決策を探しています。

更新:JavaScriptを書く必要はありません。

更新:私は可能性があります 1)ListViewの後に空のコンポーネントを追加します 2)追加するときに、これを新しいListViewに置き換え、その後にもう1つ空を追加します。 Wicketで達成可能かどうかは不明です。

+0

を参照してくださいhttp://www.oktech.hu/kb/adding-and-removing-rows([それがモデルにデータを保持_with_行う方法] -wicket-listview-via-ajax)を使用します。 –

+0

私はおそらく、改ページするリピーターの1つから始めて、下/上にスクロールするときにページ区切りトリガーを作成します。 – biziclop

答えて

0
+0

これはグリッドテーブルのようです。 ListViewなどのように、私はかなり自由なものが必要です。または少なくとも私はcolspanを使用できるようにする必要があります。 –

+0

これをツールバーなしで単一の列で使用しようとすると動作する可能性があります。 –

+0

すべてのインターフェイスを実装するのは非常に複雑です。質問に追加したアプローチを試してみましょう。 –

0

Updateから、このようなリピーターを作成することができます:私は1)リストビュー2)を追加すると、新しいリストビューでこれを交換し、別のものを追加した後、いくつかの空のコンポーネントを追加できると思いますそれ以降は空です。それがWicketで達成可能かどうかはわかりません。

いいですね。単純な部分( "Moreボタン")では、RepeatingView、空のWebMarkupContainer、AjaxLink(ページングが許可されていればロジックを追加/リンクが見えるようにする)を保持する新しいPanelを作成するだけです。

ここで、AjaxLinkのonClickはWebMarkupContainerを使用しているパネルと置き換え、ページング情報を追加してAjaxLinkを非表示にします。

私は可能なアプローチを説明するための基本的な例を書いています。

public class MoreRepeaterPanel extends Panel { 

public MoreRepeaterPanel(String id, IModel<?> model) { 
    super(id, model); 

} 

@Override 
protected void onInitialize() { 
    super.onInitialize(); 

    List<String> stringList = Arrays.asList(new String[] { "0", "1" }); 
    IDataProvider<String> idataProvider = new ListDataProvider(stringList); 

    DataView<String> dataView = new DataView<String>("dataView", idataProvider) { 

     @Override 
     protected void populateItem(Item<String> item) { 
      item.add(new Label("dataString", item.getModelObject())); 
     } 
    }; 
    add(dataView); 

    final WebMarkupContainer moreContent = new WebMarkupContainer("moreContent", new Model<Serializable>()); 
    moreContent.setOutputMarkupId(true); 
    add(moreContent); 

    AjaxLink<Void> moreLink = new AjaxLink<Void>("moreLink") { 

     @Override 
     public void onClick(AjaxRequestTarget target) { 
      WebMarkupContainer replaceMoreContent = new MoreRepeaterPanel(moreContent.getId(), new Model<Serializable>()); 
      moreContent.replaceWith(replaceMoreContent); 
      this.setVisible(false); 

      target.add(replaceMoreContent, this); 
     } 
    }; 
    moreLink.setOutputMarkupId(true); 
    add(moreLink); 
} 

}

+0

これは、HTMLで非常に深いツリーを引き起こします。これはうまくサポートされていません。また、非常に大きなリンクリストも発生します。 – RobAu