2

次のコードを取得して、他のモデル値に基づいてデフォルトを実行するにはどうすればよいですか?これは大まかに私が持っているものです

var Model = Backbone.Model.extend({
    defaults:{
        name:"",
        surname:"",
        fullTextString:""
    }
});
model = new Model({name"John", surname:"Doe", fullTextString:"John"+" "+"Doe"})

私が欲しいのは:

Backbone.Model.extend({
    defaults:{
        name:"",
        surname:"",
        fullTextString:name+" "+surname
    }
});
4

2 に答える 2

1

デフォルト値は、値を設定しない場合にのみ使用されるため、希望することはできません。

必要な機能を取得するには、次を使用します。

var Model = Backbone.Model.extend({
    defaults: {
        firstName: "",
        lastName : ""
    },

    fullName: function() {
        return this.get("firstName") + " " + this.get("lastName");
    },

    get: function( attr ) {
        if ( typeof this[attr] === "function" ) {
            return this[attr]();
        }
        return Backbone.Model.prototype.get.call(this, attr);
    }
});

このようにして、モデルを次のように初期化できます。

model = new Model({firstName: "John", lastName: "Doe"});

そしてmodel.get("fullName")、「John Doe」という名前を取得するために使用します。

于 2013-03-12T12:44:18.147 に答える
1

属性の 1 つを、渡された値と、場合によってはデフォルト値の両方に基づいて計算された値にしたい場合 (たとえば、{surname: "Munsch"} を指定しているが名前を指定していない場合)、最も簡単だと思います。次のように初期化子を追加することです。

var Model = Backbone.Model.extend({
    defaults:{
        name:"",
        surname:""
    },
    initialize: function() {
        this.set({fullTextString: this.get("name") + " " + this.get("surname")});
    }
});

model = new Model({name:"John", surname:"Doe"});
model2 = new Model({surname:"Doe"});

console.log("model fullTextString: ", model.get("fullTextString"));
console.log("model2 fullTextString: ", model2.get("fullTextString"));
于 2013-03-12T12:48:19.310 に答える