hifive / hifivemain

main repository
http://www.htmlhifive.com/
Other
40 stars 10 forks source link

controllercacheの状態が不正なため、バインドしていないハンドラが動作しエラーが発生する #472

Closed mtakeuchi closed 8 years ago

mtakeuchi commented 9 years ago

controllerCacheの状態と、実際にバインドされたコントローラに差異があるため、 以下のコード実行後に#btn2をクリックするとエラーが発生します。バグでしょうか?

再現コード

var c = h5.core.controller('body', {
  __name: 'TopPageController',
  '#btn1 click': function() {
    location.href = 'index2.html';
  },
  '#btn2 click': function() {
    location.href = 'index2.html';
  }
});

c.dispose();

h5.core.controller('body', {
  __name: 'TopPageController',
  '#btn1 click': function() {
    alert();
  }
});

Uncaught TypeError: Cannot read property 'apply' of undefined invocation.proceed h5.dev.js:6485 executeListenersInterceptor h5.dev.js:6407 (anonymous function) h5.dev.js:6488 bindObj.handler h5.dev.js:6865

simdy commented 9 years ago

仕様に基づく動作です。

現在のhifiveでは、同じ名前(__nameで指定した値)を持つオブジェクト("クラス")は 同一のものであるとみなします。 従って、同じ名前でありながら構造の異なるコントローラを定義することはできません。 構造の異なるコントローラを定義する場合は、異なる名前を使用してください。

なお、ver.1.1.14では、インスタンス生成の高速化のため、ある名前のコントローラのインスタンスを 初めて生成する際内部的にキャッシュを持っています。