高级 qooxdoo 控制器选择绑定?
Advanced qooxdoo controller selection bindings?
仅当至少选择了一个项目时我才需要启用按钮,另外我想绑定所选项目的数量。
在应用绑定时使用转换器函数我得出以下解决方案 (run in qooxdoo Playground):
// Multi-selection with <Ctrl> enabled. Click the button to clear the selection.
root = this.getRoot();
root.setLayout(new qx.ui.layout.VBox());
var model = new qx.data.Array(['one', 'two', 'three', 'four', 'five']);
var list = new qx.ui.form.List().set({selectionMode: 'multi'});
root.add(list);
var button = new qx.ui.form.Button();
button.addListener('execute', list.resetSelection, list)
root.add(button);
/**** Bindings ****/
var controller = new qx.data.controller.List(model, list);
// Enable button when there is at least one list element selected
controller.bind('selection[0]', button, 'enabled', {
converter: function (data)
{
return (data) ? true : false;
}
});
// Label button with amount of selected list items
controller.bind('selection', button, 'label', {
converter: function (data)
{
return data.length.toString();
}
});
有效,但是:
是否有更好的解决方案,最好没有转换器功能?
我搜索了 "isSelected" 或 "selection.length" 等属性,但无济于事。我想了解绑定系统并认为我遗漏了一些东西...
Enabling/disabling 按钮通过事件,没有绑定,更不优雅,它要求按钮最初被禁用:
controller.getSelection().addListener('change', function ()
{
button.setEnabled(controller.getSelection().getLength() > 0)
}, this)
button.setEnabled(false)
即使您有 isSomethingSelected 标志,您也需要一些绑定。
selection 是一个 qx.data.Array,所以你可以通过监听 [=17 来稍微简化你的代码=]length 更改 - 通过绑定 number 到 boolean 转换器,或使用更改侦听器:
controller.getSelection().addListener("changeLength", function(ev) {
var length = ev.getData();
button.set({
enabled : length > 0,
label : length.toString()
});
如果您想要按钮中所选项目的数量,则后者有意义。正如您已经说过的,在这种情况下,您最初需要禁用该按钮。
仅当至少选择了一个项目时我才需要启用按钮,另外我想绑定所选项目的数量。
在应用绑定时使用转换器函数我得出以下解决方案 (run in qooxdoo Playground):
// Multi-selection with <Ctrl> enabled. Click the button to clear the selection.
root = this.getRoot();
root.setLayout(new qx.ui.layout.VBox());
var model = new qx.data.Array(['one', 'two', 'three', 'four', 'five']);
var list = new qx.ui.form.List().set({selectionMode: 'multi'});
root.add(list);
var button = new qx.ui.form.Button();
button.addListener('execute', list.resetSelection, list)
root.add(button);
/**** Bindings ****/
var controller = new qx.data.controller.List(model, list);
// Enable button when there is at least one list element selected
controller.bind('selection[0]', button, 'enabled', {
converter: function (data)
{
return (data) ? true : false;
}
});
// Label button with amount of selected list items
controller.bind('selection', button, 'label', {
converter: function (data)
{
return data.length.toString();
}
});
有效,但是:
是否有更好的解决方案,最好没有转换器功能?
我搜索了 "isSelected" 或 "selection.length" 等属性,但无济于事。我想了解绑定系统并认为我遗漏了一些东西...
Enabling/disabling 按钮通过事件,没有绑定,更不优雅,它要求按钮最初被禁用:
controller.getSelection().addListener('change', function ()
{
button.setEnabled(controller.getSelection().getLength() > 0)
}, this)
button.setEnabled(false)
即使您有 isSomethingSelected 标志,您也需要一些绑定。
selection 是一个 qx.data.Array,所以你可以通过监听 [=17 来稍微简化你的代码=]length 更改 - 通过绑定 number 到 boolean 转换器,或使用更改侦听器:
controller.getSelection().addListener("changeLength", function(ev) {
var length = ev.getData();
button.set({
enabled : length > 0,
label : length.toString()
});
如果您想要按钮中所选项目的数量,则后者有意义。正如您已经说过的,在这种情况下,您最初需要禁用该按钮。