使用继承配置netzkejavascript代码(在带有参数的父类中定义js代码)
configuring netzke javascript code using inheritance (defining js code in a parent class with parameters)
我有两个带有操作列的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
与CpPole类中的this
不同,但on_locate_map
确实起作用。
我该如何解决此问题?
目前我以不同的方式解决了它,我在基类中添加了一个方法
def self.set_action_methods(layer_name)
js_configure do |c|
c.on_locate_on_map = <<-JS
function(record){
Map.zoomToFeature('#{layer_name}', record.raw[0]);
}
JS
end
end
它添加了所有的操作方法(在我的代码中,它添加的不仅仅是一个)。
所以我的派生类变得非常简单,我只需要指定配置块
class Markerpoles < Netzke::MyBaseGrid
def configure(c)
super
c.model = 'Markerpole'
c.columns = [
:name,
{name: :location, flex: 1},
{name: :comments, flex: 1},
{name: 'markerpole_material__label', text: "Material"}
]
end
set_action_methods('markerpoles')
end
看起来不错。不确定是否有更好的解决方案?
相关文章:
- 是否可以从父类访问子类的属性
- 使用此选项选择父类内部的类
- 子类访问父类's闭包变量
- 如何通过Prototype或jquery移除子类的父类基类
- JavaScript—父类和子类/对象的此问题
- 通过使用此组件,检索父类数据
- jQuery .not() 排除特定类的父类
- 如何在 jQuery 中获取具有特定父类的所有元素的内容,并将它们传递给 GET 变量
- 如何在单击父类的另一个子类时获取子类的值
- 初始化父类中的变量(JavaScript/CoffeeScript 习语)
- hover添加类-或子类:悬停以影响父类
- 唯一标识父类的元素
- jQuery/can'我找不到避免代码添加类的方法
- 无法将值从实例对象传输到父类的实例数组中
- jQuery父类更改的子级
- 在父类更改时停止HTML5音频/视频
- 如何从父类中记录成员函数
- 如果类中没有子元素,则赋予父类
- 使用继承配置netzkejavascript代码(在带有参数的父类中定义js代码)
- 单击父类中的任何内容时,从父类中删除该类