0

次のような jQuery コードを使用して、クラス (RowsEditor と呼びます) とそのサブクラス (DateRowsEditor と呼びます) を実装します。

function create_RowsEditor(tableId) {
  var rowsEditor = {
    tableId: tableId,
    quit_row: function(ctl) { /*...*/ }
  };
  $('#'+tableId).click(function(event) {
    var tr = event.delegateTarget;
    rowsEditor.quit_row(tr);
  });
  return rowsEditor;
}

function create_DateRowsEditor(tableId) {
  var rowsEditor = $.extend({}, create_RowsEditor(tableId), {
    quit_row: function(ctl) { /*...*/ }
  };
  return rowsEditor;
}

次に、DateRowsEditor() 型のオブジェクトを作成します。

var rowsEditor = create_DateRowsEditor('come'):

問題は、ユーザーがクリックすると、本来あるべき create_DateRowsEditor() で作成された派生オブジェクトではなく、create_RowsEditor() で作成されたオブジェクトで quit_row() が呼び出されることです。

構造化されたオブジェクト指向の方法で適切に行うには?

4

2 に答える 2

0

.init() メソッドを追加して問題を解決しました。

var rowsEditor = {
  tableId: tableId,
  init: function() {
    var self = this;
    $('#'+tableId).handleRowsBlur(function(event) {
      var tr = event.delegateTarget;
      self.quit_row(tr);
    });
    return this;
  },
  ...

そして、次のようなオブジェクトを作成します:

/*var rowsEditor =*/ create_ComeEditor('come').init();

この方法では、イベント ハンドラーの初期化が呼び出される必要がある場合にのみ呼び出されるため、これは私の問題を解決する適切な方法です。

于 2013-07-01T19:14:16.443 に答える