2

networkモデルのインプレース編集をセットアップしました。モデルのtitleと の2 つの入力フィールドがあります。ユーザーがタイトルをクリックすると、正規の Todos の例と同様に、のタグがdescription切り替わります。<h2><input>

次のように、関連するテンプレートにイベントを追加しています。

Template.network_edit.events = {}

Template.network_edit.events['click #network-description'] = -> 
    Session.set('editing_network_description',true)
    Meteor.flush()
    focus_field_by_id('network-description-input')

Template.network_edit.events['click #network-title'] = -> 
    Session.set('editing_network_title',true)
    Meteor.flush()
    focus_field_by_id('network-title-input')

focus_field_by_id機能は、

  var focus_field_by_id = function (id) {
  var input = document.getElementById(id);
  if (input) {
    input.focus();
    input.select();
  }
};

すべてが期待どおりに機能しますが、 をクリックすると#network-description、コンソールに次のエラーが表示されます。

Uncaught TypeError: Cannot read property 'parentNode' of null

の 600 行目でスローされliveui.jsます。をクリックして#network-titleも、そのようなエラーは表示されません。

イベントの順序を逆にして、#network-titleイベントを最初に配置し、network-description2 番目にすると、代わりに をクリックするとエラーが発生します#network-title。通常、追加された最初のイベントはこのエラーをスローしますが、後続のイベントはスローしません。

私が言ったように、すべてが適切に機能しているように見えます (入力が表示され、フォーカスが得られるなど) が、エラーは当惑しており、何かが欠けている可能性があります。

4

1 に答える 1

3

あ、再現できました。

これは、イベント処理中に DOM が変更されたときに発生するバグです。を呼び出した後、Meteor.flush()イベントの元のターゲットはテンプレートにありません。Meteor のイベント処理コードは、おそらく 2 番目のハンドラーが適用されるかどうかを確認しているときにチョークします。そのため、最初のハンドラーが壊れているように見えます。エラーは無害であり、何も悪いことをしていません。

イベント処理は次のリリースに向けて書き直されており、新しいコードがすでに合格しているこの場合の回帰テストを実施しています。

ご報告いただき、ありがとうございます。

于 2012-05-08T07:12:38.040 に答える