领域模型:类型1、类型2、类型3和工厂。
$ rails g model type1 name:string
$ rails g model type2 name:string
$ rails g model type3 type1:references type2:references name:string
$ rails g model plant type1:references type2:references type3:references name:string
在植物的网格面板中,将有三个组合框列:类型1,类型2和类型3。类型 3 取决于类型 1 和类型 2。当选择类型1和类型2中的任何一个时,如何过滤类型3组合框?
我是Rails和Netzke的新手,但这就是我解决问题的方式。
首先,如果Type3依赖于Type1和Type2,那么在植物中只应该引用Type3。
所以,而不是
rails g model plant type1:references type2:references type3:references name:string
使用
rails g model plant type3:references name:string
您可以使用Netzke的__
(双下划线)符号来引用type1和type2。这是我的植物网格版本。我不允许内联编辑,除了大多数琐碎的模型。
class Plants < Netzke::Basepack::Grid
def configure(c)
super
c.model = 'Plant'
c.persistence = true
c.columns = [
{ name: :type3__type1__name, header: 'Type 1'},
{ name: :type3__type2__name, header: 'Type 2'},
{ name: :type3__name, header: 'Type 3'},
{ name: :name, header: 'Plant Name' }
]
c.enable_edit_inline = false
c.enable_add_inline = false
end
def preconfigure_record_window(c)
super
c.form_config.klass = PlantForm
end
end
要连接组合框,您需要:
> < li>
定义type3组合的范围,以便其数据依赖于type1和type2 IDs。
#Example scope definition
scope: {type1_id: component_session[:type1_id],
type2_id: component_session[:type2_id]}
为type1和type2组合定义侦听器(请参见< code>js_configure方法)。侦听器将检测type1和type2中的任何变化,并准备type3在下次被选中时刷新其数据。
endpoint和会话变量用于ID交换。
//JavaScript code
//Definition of listener function for type1 combo
var handleType1Change = function() {
//Type3 value is no longer valid
type3Combo.clearValue();
//Setting lastQuer to null will force data refresh for type3 combo
//next time it gets selected.
type3Combo.lastQuery = null;
//Call endpoint to define session variable with ID of type1 combo
this.selectType1({type1_id: type1Combo.value});
};
#Ruby code
#The endpoint is called from handleType1Chnage listener to
#set session variable with selected ID in type1 combo.
endpoint :select_type1 do |params, this|
component_session[:type1_id] = params[:type1_id]
end
这是我的植物形式的完整代码:
class PlantForm< Netzke::Basepack::Form
def configure(c)
super
c.model = 'Plant'
c.title = 'Plant'
c.items = [
{
field_label: 'Type1',
xtype: :combo,
store: Type1.select([:id, :name]).map { |x| [x.id, x.name] },
id: 'type1Combo',
#Sets the value for type1 in case change form is opened
value: record && record.id ? record.type3.type1_id : nil
},
{
field_label: 'Type2',
xtype: :combo,
store: Type2.select([:id, :name]).map { |x| [x.id, x.name] },
id: 'type2Combo',
#Sets the value for type2 in case change form is opened
value: record && record.id ? record.type3.type2_id : nil
},
{
field_label: 'Type3',
name: :type3__name,
id: 'type3Combo',
data_store: {auto_load: false},
scope: {type1_id: component_session[:type1_id],
type2_id: component_session[:type2_id]}
},
{ field_label: 'Name', name: :name }
]
end
js_configure do |c|
c.init_component = <<-JS
function() {
this.callParent();
var type1Combo = this.getComponent('type1Combo');
var type2Combo = this.getComponent('type2Combo');
var type3Combo = this.getComponent('type3Combo');
var handleType1Change = function() {
type3Combo.clearValue();
type3Combo.lastQuery = null; //force data refresh in type3 combo
this.selectType1({type1_id: type1Combo.value});
};
var handleType2Change = function() {
type3Combo.clearValue();
type3Combo.lastQuery = null;
this.selectType2({type2_id: type2Combo.value});
};
type1Combo.addListener('select', handleType1Change, this);
type2Combo.addListener('select', handleType2Change, this);
}
JS
end
endpoint :select_type1 do |params, this|
component_session[:type1_id] = params[:type1_id]
end
endpoint :select_type2 do |params, this|
component_session[:type2_id] = params[:type2_id]
end
end
我想要一个组合框,它会在用户键入时过滤列表项。它应该如下工作: 键入时,文本字段应该显示一个可能的选择,但是用户尚未键入的单词部分应该突出显示。 当他打开列表时,下拉框应该只显示可能的选项? 使用箭头键,用户应该在缩小可能的项目后选择剩余的项目之一。 过滤并不重要,跳转到第一个匹配的选择也可以。 有类似的吗?
主要内容:硬编码组合框实例,由映射生成组合框实例,组合框内部项以下部分介绍如何从JSF创建HTML组合框。标签呈现大小未指定的“”类型的HTML输入元素。 以下JSF标签 - 被渲染成以下HTML代码 - 硬编码组合框实例 以下是文件:index.xhtml 中的代码 - 以下是文件:result.xhtml 中的代码 - 以下是文件:UserBean.java 中的代码 - 由映射生成组合框实例 以下是文件:UserBean.java 中的代码 - 以下是
Ext-js为Grid store内置了一个名为filter的函数,该函数用组合框中的选定值过滤网格结果。 我想要反过来。它应过滤除所选数据之外的网格数据。 示例:默认情况下,首先选中“全部”复选框。当我取消选中任何复选框时,网格应该显示除所选复选框之外的数据。 请查找筛选选项的屏幕截图 下面是我尝试过的代码,但是它确实过滤了选中复选框的网格。 如果有人对此有任何建议,请告诉我。
我有一个简单的可编辑的JComboBox,当您键入时,它过滤可用的选择。除了一些奇怪的情况外,它几乎可以工作,例如,当你键入“Sass”时,它将可用的选择过滤到一个“Sassi di Matera”,但如果你选择它,它将选择“Arte ruprestre della Vacamonica”,它碰巧是原始模型的第[0]项,而不是过滤后的模型的第[0]项。 我试着调试了几个小时,但似乎是一些奇怪的up
主要内容:Listbox控件,Combobox控件列表框(Listbox)和复选框(Combobox)是 Tkinter 中两个控件,由于其非常相似,本节将它们放在一起进行介绍。 Listbox控件 首先介绍一下列表框,即 Listbox。在使用 Tkinter 进行 GUI 编程的过程中,如果需要用户自己进行选择时就可以使用列表框控件。列表框中的选项可以是多个条目,也可以是单个唯一条目,但常用于多个条目。 下面对列表框控件(Listbox)的常
问题内容: 我有一个发布功能,如下所示: 现在假设在某些时候对Projects进行了更改,结果是上面返回了一个不同的项目,因此Tasks.find将返回其他任务。但是,对项目所做的更改不会重新发布 任务 我已经使用了reactPublish,但事实证明该程序包存在问题(并且也没有任何单元测试)。因此,是否有一种简单的方法可以在项目更改时重新发布此发布功能? 问题答案: 通过调用安装软件包。 添加软