0

アクション列を持つ 2 つの 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 

しかし、それは機能しません:(だから私はミックスインとinitComponentセットthis.layer_nameで試しましたが、それも機能しませんでした.共有グリッドの はCpPole クラスthisの と同じではないのではないかと心配していますが、機能します.thison_locate_map

これを解決するにはどうすればよいですか?

4

1 に答える 1

0

とりあえず、別の方法で解決しました。基本クラスにメソッドを追加しました

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

これにより、すべてのアクション メソッドが追加されます (私のコードでは、1 つ以上のメソッドが追加されます)。

したがって、私の派生クラスは非常にシンプルになります。configure ブロックを指定するだけです。

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

かなりいいですね。より良い解決策があるかどうかわかりませんか?

于 2013-11-26T09:27:46.950 に答える