2011-04-08 26 views
2

我無法使我們的新海濱應用程序ajaxifying。該應用程序的目標是在級聯視圖中顯示合約數據(概念如樹,但視覺上只是組件內部的組件):在頂層顯示合約名稱,單擊它們可以顯示所謂的「集合」這些合同包含,點擊那些揭示所包含的所謂「部分」等等。 image showing our guiajaxifying海邊應用程序幫助(需要模板或簡單示例)

在我們做了,我們只加載到客戶端的所有信息,然後將草案版本使用:

renderContentOn: html 
.... 
html div 
    onClick: (html scriptaculous effect id: tmpid; toggleAppear); 
    onClick: (html scriptaculous request callback: [visible:=self visible not]); 
with: ... 

成功地融爲一體,在和融出各個層次的子組件。

將所有信息加載到客戶端僅用於草稿版本;對於下一個版本,我們只想動態加載用戶想要擴展的那些分支。我們知道如何將這種根據海濱圖書,做我們得到了客戶正確地更新下列操作:

onClick: (html jQuery ajax script: [:s| 
    s << (s jQuery: tmpid) append: ... 

但是:我們有麻煩保持客戶端狀態和服務器狀態正確的:我們即使當用戶使用html-form-inputs(見圖)來更改樹的內容時,也希望保持樹的部分狀態(對樹中的每個節點都未加載/展開/摺疊)。如果連接暫時不可用(否則用戶的整個狀態和字段編輯會丟失,並顯示404,後退將導致會話不一致,最壞的情況),我們也希望保持狀態。情況更加複雜,因爲我們希望允許多個用戶使用這種行爲;當然每個用戶具有不同的樹狀態(對於樹中的每個節點都未加載/展開/摺疊)但是數據字段中的一致條目的語義。

你有一個模板或最小的例子,可以有這種更新的服務器會話嗎?

回答

1

您是否閱讀過關於Seaside Ajaxification的博文和後續的FAQ?這當然是讓AJAX進入你現有的Seaside應用程序的最簡單的方法(查看FAQ中的最後一個問題,看看如何開始)。由於這使用正常的Seaside回調機制,狀態會自動保持同步。

如果您想查看服務器狀態和客戶端DOM可以如何管理的複雜示例,請查看包Scriptaculous-Components隨附的樹報告小部件,並在類SUTreeReport中實施。您可能還想看看Reef。 Reef提供對低級AJAX協議的抽象,並自動更新Seaside中的組件。