2017-01-30 66 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的对症处理,而我讨厌在其他人的代码中当我必须自己做这件事时,它确实真的让我感到不安! –

相关问题