1

Backbone.jsとClosureCompilerを詳細モードで使用しようとしています。Backbone.Modelを使用してゲッター/セッターを作成する便利な関数を作成しBackbone.Model.defaultsました。次のようになります。

some.defaultProperties = function(ctor) {
    if (!ctor.prototype.defaults)
        return;
    var defattr = function(name) {
        return {
            get: function() {
                return this.get(name);
            },
            set: function(val) {
                var diff = {};
                diff[name] = val;
                return this.set(diff);
            }
        };
    };
    var props = {};
    for (var attr in ctor.prototype.defaults) {
        if (ctor.prototype.defaults.hasOwnProperty(attr))
            props[attr] = defattr(attr);
    }
    Object.defineProperties(ctor.prototype, props);
};

ここでCoffeeScriptと同等http://srackham.wordpress.com/2011/10/16/getters-and-setters-for-backbone-model-attributes/

次に、詳細モードのClosureCompilerに戻ります。通常のプロパティアクセス構文を使用してアクセスしているため、気に入らないようです。model.colorの代わりにmodel.get('color')、それがポイントです。しかし、クロージャーはそれらを巧みに操っているので、私undefinedは自分の価値の代わりに得ます。これに対する回避策はありますか?(使用するすべてを書き直すことを除いてget('attrname'))?

UPDATEBackbone.Model.hasChangedそしてもちろん、これは属性名に文字列リテラルを使用する他のメソッドでどのように機能しますか。

4

2 に答える 2

1

引用符で囲まれた構文を使用してプロパティを定義しています。

props[attr]

しかし、点線の構文を介してそれらにアクセスしようとすると、問題が発生します。

model.color

ADVANCED_OPTIMAZATIONSでは、基本的なルールとして、プロパティを一貫して参照する必要があります。https://developers.google.com/closure/compiler/docs/api-tutorial3#propnamesを参照してください

これらのプロパティに引用符で囲まれた構文を使用するのが最も簡単な答えのようです。

model['color']

ただし、そのようなプロパティの名前変更とデッドコードの削除はすべて失われます。

于 2012-08-23T15:35:06.500 に答える
1

動的に作成するプロパティはすべて、詳細モードでは「外部」であり、3つの選択肢があります。(1)引用符で囲まれたアクセスを使用する(Chadが提案する)、(2)外部を作成する、または(3)シンプルモードを使用して、プロパティの名前変更とグローバルデッドを放棄するコードの削除。

于 2012-08-23T23:54:58.630 に答える