2
renderFilterOn: html
|aFilter|
html textInput
onKeyUp: (html jQuery ajax callback: [:val | aFilter := val] 
                value: ((html jQuery this) value);
            script: [:s | 
                s add: ((s jQuery class: 'itemnames') 
                each: (s jQuery ajax callback: [:v | |aName anID |
                aName := ((v subStrings: $,) last).
                anID := ((v subStrings: $,) first).
                 ((aName asUppercase) includesSubString: (aFilter asUppercase))
                    ifFalse: ["Do something here to hide values"]] value: (Array with: ((html jQuery this) attributeAt: 'id') with: (html jQuery this) text)))
                    ]
        )

那么,在“在这里做点什么来隐藏价值观”中我该怎么做呢?

我得到的 ID 是我想要隐藏其父 'tr' 元素的 'td' 元素的 ID。

我真的不想做新的组件和渲染的东西,因为表格可以包含成千上万的结果,并且显示一个新组件,在每次按键时过滤这些结果会使事情变得太慢。

4

2 回答 2

2

您可能想看看 JQAutocomplete 组件。这是jQuery UI Autocomplete的 Seaside 包装器。

对于这种行为,您真的不希望在每次击键时都回调到服务器。相反,从一定数量的字符(可以是 1)开始,向服务器执行请求以检索项目列表,然后可以进一步细化客户端。

于 2013-06-20T10:17:41.187 回答
2

如果您担心速度并且在初始渲染期间已经将所有数据发送到客户端,那么您应该在客户端的 JS 中进行所有过滤。

我会做一个这样的CSS类:

.hideRow {
     display:none;
} 

并根据在输入中键入的内容将该类添加或删除到行中。

将您的输入渲染方法更改为:

renderFilterOn:html
html textInput
     id: html nextId;
     onKeyUp:((html jQuery id: html lastId) call:'filterRows').

然后有一个静态 js 文件提供给该页面,其中包含根据输入值添加或删除类的 filterRows 函数

于 2013-06-20T17:43:17.933 回答