2017-01-30 21 views
0

我正在使用表達式語言給客戶端的JavaScript函數一個特定的DIV的ID。我使用這個:解析XPages/JSF標識時,爲什麼:有時會附加0?

"#{id:repeatsecondlevelnodes}" 

首先,我不完全確定解析器如何找到'真正'的ID。我假設它與CSS選擇器類似,但我一直無法找到它的權威性文檔。我會很感激任何類型文檔的鏈接。

其次,我不明白爲什麼有時解析值與後綴:0

有時我會得到

view:_id1:repeatfirstlevelnodes:1:repeatsecondlevelnodes:0 

當我期待

view:_id1:repeatfirstlevelnodes:1:repeatsecondlevelnodes 

和我不明白是什麼導致了差異。到目前爲止,我只是通過刪除:0來入侵它,但我寧願瞭解解析器實際工作的方式。

the source of my confusion

+1

它被追加,沒有預先,並且不要在截圖中張貼代碼。第三,發佈xhtml/xpage的相關源代碼。簡短的回答:如果你有像DataTable一樣的迭代組件,它會被添加:ui:repeat或者類似 – Kukeltje

+1

@Kukeltje:通常它們的索引不會在鏈的最後位置結束。安德魯:這是一些值得思考的食物http://stackoverflow.com/q/12615556即是說,你似乎在濫用身份證,最終導致同樣的事情。 – BalusC

+0

@BalusC:真的,忘了那個... – Kukeltje

回答

0

"#{id: ... }"是一種特殊的表達得到一個XPage控件ID的渲染客戶端ID。它在服務器端執行。服務器知道呈現的客戶端元素將獲得什麼ID。

例子:

在一個XPage

var element = document.getElementByID("#{id:repeatsecondlevelnodes}") 

definied的CSJS代碼將由服務器修改之前它會發送到客戶端類似

var element = document.getElementByID("view:_id1:repeatfirstlevelnodes:0:repeatsecondlevelnodes") 

這將始終作爲工作服務器知道確切的客戶端ID。

不要試圖自己計算客戶端ID,因爲當您更改XPage中的某些內容時它們可能會發生變化。只要相信"#{id: ... }"表達式。

+0

嗨克努特和謝謝你的答案。我的用例稍微複雜一些; CSJS的語法是動態生成的(它是一系列嵌套重複控件的一部分)。與此鏈接:http://stackoverflow.com/questions/41912525/nested-expression-language-syntax-in-xpages。然而,我沒有得到的東西是爲什麼有時會在計算的ID後附加一個:0。我試圖瞭解是什麼導致:0,並避免它,我不想自己計算id。 –

+0

我明白了。雖然,「到目前爲止,我只是通過刪除:0」來攻擊它,就像計算客戶端ID一樣;-) –

+0

它甚至更糟糕,它是bug的對症處理,而我討厭在其他人的代碼中當我必須自己做這件事時,它確實真的讓我感到不安! –

相關問題