hifive / hifivemain

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

親コントローラの__initで、__initでPromiseを返す子コントローラをmanageChildすると、子コントローラの__initが2回実行されてしまう #588

Open mtakeuchi opened 7 years ago

mtakeuchi commented 7 years ago

親コントローラのinitで、initでPromiseを返す子コントローラをmanageChildすると、子コントローラの__initが2回実行されてしまう。

サンプルコード

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Sample</title>
    <link href="//code.htmlhifive.com/h5.css" rel="stylesheet">
    <script src="//code.jquery.com/jquery-2.2.4.min.js"></script>
    <script src="//code.htmlhifive.com/ejs-h5mod.js"></script>
    <script src="//code.htmlhifive.com/h5.js"></script>
  </head>
  <body>
    <div id="result"></div>
    <script>
      h5.core.controller('body', {
        __name: 'ParentController',
        __init: function() {
          $('#result').append('<div>ParentController __init called.</div>');

          var child = h5.core.controller('body', {
            __name: 'ChildController',
            __init: function() {
              $('#result').append('<div>ChildController __init called.</div>');

              var df = this.deferred();

              setTimeout(function() {
                df.resolve();
              });

              return df.promise();
            },
            __ready: function() {
              $('#result').append('<div>ChildController __ready called.</div>');
            }
          });

          this.manageChild(child);
        },
        __ready: function() {
          $('#result').append('<div>ParentController __ready called.</div>');
        }
      });
    </script>
  </body>
</html>

・実行結果 ParentController init called. ChildController init called. ChildController init called. ChildController ready called. ParentController __ready called.