2

こんにちは、アンダースコアの once() を使用した requirejs シングルトンのわかりやすい例を教えてください。

私はこれまでのところこれを持っています:

define(['jquery', 'underscore', 'backbone'], function($, _, Backbone) {

    var SingletonModel = Backbone.Model.extend({
        urlRoot: "/model",
        idAttribute: "_id"
    });

    return function() {
        once(SingeletonModel);
    };

});

ご覧のとおり、特に return ステートメントは完全にくだらないものです。Backbone.Model をシングルトン化する方法がわかりません...

4

2 に答える 2

2

AMD互換のシングルトンが必要な場合は、次を使用できます。

define(
    [...],
    function() {
        var MyModel = Backbone.Model.extend({
            //...
        });

        return new MyModel();
    }
);

require.js の動作方法により、MyModel のインスタンスを 1 つだけ取得する必要があります。

私が理解し_.once(someFunction)ていることから、その戻り値が格納されているため、関数が最初に呼び出されるたびに元の戻り値が返されるため、一度だけ呼び出すことができる関数が生成されます。

ただし、シングルトンの場合、使用しているものは、_.once(MyModel)常に同じオブジェクトを返すコンストラクターを返します (私が知る限り)。テストできます: http://jsfiddle.net/gfarrell/Z3CNc/

そのフィドルでわかるようにreturn this;、コンストラクターの最後にある場合は問題ありません。削除return this;してからコンソール出力を使用して 2 番目のインスタンスを調べてみると、最初のインスタンスのプロパティがないことがわかります。

于 2012-08-29T10:58:23.833 に答える
1

私はこれをやっています

define(['jquery', 'underscore', 'backbone'], function($, _, Backbone) {

    var SingletonModel = Backbone.Model.extend({
        urlRoot: "/model",
        idAttribute: "_id"
    });

    if (SingletonModel.prototype._instance){
        return SingletonModel.prototype._instance;
    }
    SingletonModel.prototype._instance = new SingletonModel;
    return SingletonModel.prototype._instance;

});

次に、このファイルを必要として、インスタンスとして使用します。

編集:試したことはありませんが、once() の使用法はあなたのケースにあるはずです

underscore.once()
于 2012-08-22T10:51:30.503 に答える