我有两个带有动作列的 netzke 网格组件(还有更多在路上)。操作列几乎相同,具体取决于类型。唯一的区别是单击操作按钮时要执行的操作。
所以我想要做的是定义一个新的网格组件,它具有所有共享部分,包括 javascript,然后在继承类中配置 javascript(设置参数/上下文)。
首先,我的课程如下所示:
class CpPoles < Netzke::Basepack::Grid
include Netzke::Basepack::ActionColumn
.. snipped ..
column :actions do |c|
c.type = :action
c.actions = [
{name: :locate_on_map, tooltip: "show on map", icon: :map_marker},
]
end
js_configure do |c|
c.on_locate_on_map = <<-JS
function(record){
Map.zoomToFeature('cp_poles', record.raw[0]);
}
JS
end
end
在我的其他课程中,它看起来相同,除了 layer_name:
js_configure do |c|
c.on_locate_on_map = <<-JS
function(record){
Map.zoomToFeature('markerpoles', record.raw[0]);
}
JS
end
所以我引入了一个新的网格类,它包含所有共享配置,并定义了动作:
js_configure do |c|
c.on_locate_on_map = <<-JS
function(record){
Map.zoomToFeature(this.layer_name, record.raw[0]);
}
JS
end
现在我只需要设置this.layer_name
. 我想很容易。在我的课堂CpPole
上,我现在可以写作
class CpPoles < Netzke::MyApplication::Grid
js_configure do |c|
c.layer_name = 'cp_poles'
end
end
但这不起作用:(所以我尝试使用mixin,并在现场尝试initComponent
,this.layer_name
但这也不起作用。恐怕this
我的共享网格中的 与this
我的 CpPole 类中的不同,但on_locate_map
确实有效.
我该如何解决这个问题?