7

バックボーン モデルにカスタム プロパティを追加したい場合、これを行うのが最善でしょうか? 私が達成したい機能へのより良い方法または完全に異なるアプローチはありますか?

var myModel = Backbone.Model.extend({

   defaults:{
    monthly_amount: 100
   },

   initialize: function(model, options){

     var m = this;

     Object.defineProperty(this,"yearly_amount",{
       get: function() {
                         return (m.get("monthly_amount") * 12);
                       },
       set: function(value) {
                         m.set("monthly_amount", (value/12) );
                       }
     });

   }
});

ありがとう!

編集:プロパティは単なる「仮想」です。モデルをサーバーに保存するときに、モデル属性内に配置したくありません。

4

2 に答える 2

2

したがって、ここでの一般的な問題は「計算されたプロパティ」と呼ばれることが多く、これを提供するバックボーン用のプラグインがあります (以下を参照)。バックボーンはget/setスタイルではなくメソッド呼び出しスタイルを使用するdefinePropertyため、あなたのアプローチでは値の計算がビューに対して透過的ではないため、バックボーンの設計からかなり離れています。get/set適切なインターフェイスを維持するプラグインchangeは、基本的なモデル API を維持するため、ビューはこの特定のモデル属性を異なる方法で処理する必要はありません。

プラグインのバックボーン wikiも参照してください。

利用可能なプラグイン:

于 2013-11-11T15:03:00.307 に答える
0

プロパティをデフォルトのオブジェクトに設定すると、属性に移動しますが、私たちには合いません。バックボーン モデルは通常のオブジェクトであるため、オブジェクトのプロパティとしてそのプロパティにアクセスできます。

var myModel = Backbone.Model.extend({}),
    model = new myModel();

model.monthly_amount = 50;
console.log(model.monthly_amount)

または、次のようにセッターとゲッターを作成します。

var myModel = Backbone.Model.extend({
    setMonthlyAmount: function (value) {
        this.monthly_amount = value;
    },

    getMonthlyAmount: function () {
        return this.monthly_amount;
    }

});

//access with getter/setter
var model = new myModel();

model.setMonthlyAmount(20);
var result = model.getMonthlyAmount();
console.log(result);

jsfiddle での作業例

于 2013-11-11T15:43:08.023 に答える