Skip to content

DataModel で base を指定すると base に指定した Model の作成に失敗するようになる #198

@3bch

Description

@3bch

確認した環境

  • OS: OSX 10.8.3
  • ブラウザ: Google Chrome 26.0.1410.65, Firefox 19.0.2 (他のブラウザは試してません)
  • hifive: 1.1.4-all に含まれる dev 版

問題発生の状況

以下のようなコードを書いたとき parentModel を create するタイミングでエラーが発生します。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>hifive DataModel BUG</title>
    </head>
    <body>
        <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
        <script src="/hifive/h5-1.1.4.dev.js"></script>
        <script>
            var manager = h5.core.data.createManager('DataManager', 'model');

            var parentModel = manager.createModel({
                name: 'ParentModel',
                schema: {
                    id: {
                        id: true,
                        type: 'integer',
                    }
                }
            });

            var childModel = manager.createModel({
                name: 'ChildModel',
                base: '@ParentModel',
                schema: {
                    name: {
                        type: 'string',
                    }
                }
            });

            parentModel.create({ id: 0 });
        </script>
    </body>
</html>

Chrome だと h5-1.1.4.dev.js の 10710行目 で Uncaught TypeError: Object #<Object> has no method 'name' が発生し、Firefox だと同じ箇所で TypeError: this._itemValueCheckFuncs[prop] is not a function が発生することを確認しました。

childModel 側を削除するとエラーが発生しなくなることから、base を継承した側の name が base 側に影響をおよぼしてしまっているようです。

原因と思われる箇所

ちょっと原因を追ってみたんですが、base を指定した Model を createModel() で設定しているあいだに、validateDescripter() の中(h5-1.1.4.dev.js の 9500行目)で以下のように baseSchema を書き換えている部分が原因ではないかと思います。

schema = $.extend(baseSchema, schema);

Metadata

Metadata

Assignees

Labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions