0

私は、requireJS と、これまで見たことのない奇妙な構文を使用するサイトのスクリプトに取り組んでいます。

define("app/models/UserModel", ["backbone", "lang/Lang"], function (e, t) {
    var n = e.Model.extend({
        defaults: {
            item: "",
            these: "",
            arent: "",
            important: "en",
            relationship: 0,
            _position: {
                c: 0,
                r: 0
            }
        },
        hasPermission: function (e) {
            return this.get("permission") >= e
        },
        getTotalPoints: function () {
            return this.get("somestuff")
        }
    });

私は require(["app/models/UserModel"]) を使用してモジュールをロードし、 require("app/models/UserModel").default を使用してオブジェクトをロードし、同じ方法で関数を試して使用しましたが、それらが存在しないと言って戻ってくるだけです。同じ方法で別のモデルの機能にアクセスできましたが、他のほとんどのモデルでは機能しません。

それとは別に、 var n = e.Model.extend がそれと関係があるかどうか疑問に思っています。その機能が何なのか理解できません。

4

1 に答える 1

0

この構造は、非同期モジュールのロードが機能するために必要です。RequireJS モジュールは、によって呼び出される関数内で構築されdefineます。関数はreturn、モジュールのパブリック インターフェイスに想定されています。あなたの場合、次のようなものが必要です:

define("app/models/UserModel", ["backbone", "lang/Lang"], function (backbone, lang) {
    var MyModel = backbone.Model.extend({
        defaults: {
            item: "",
            these: "",
            arent: "",
            important: "en",
            relationship: 0,
            _position: {
                c: 0,
                r: 0
            }
        },
        hasPermission: function (e) {
            return this.get("permission") >= e
        },
        getTotalPoints: function () {
            return this.get("somestuff")
        }
    });

    // return the created model object so that it is
    // accessible as require("app/models/UserModel").default_
    return {
        default_: MyModel
    }
});

(ただし、私は Backbone に詳しくないことに注意してください)。また、使用しているモジュールは縮小されてから美化されたものだと思います。変数名が 1 文字の長さであり、覚えやすいものではないからです。また、defaultはステートメント内で使用するためのキーワードでswitchあり、有効な変数名ではありません。

于 2013-08-24T01:47:44.080 に答える