0

だから私はEmberオブジェクトを持っています:

App.User = Ember.Object.extend({
    firstName: null, 
    lastName: null, 
    dob: Ember.Object.create({
        day: null,
        month: null,
        year: null,
        display: function () {
            var self = this,
            day = (self.get('day') < 10 ? "0" : "") + self.get('day'),
            month = (self.get('month') < 10 ? "0" : "") + self.get('month'),
            year = self.get('year');

            return day + '/' + month + '/' + year;
        }.property('day', 'month', 'year')
    })
});

そして、コントローラーで-オブジェクトのバージョンを作成しています-これはフォームによってバインドされます:

App.IndexController = Em.ArrayController.extend({
    user: App.User.create()
});

ただし、何らかの理由で、コントローラー内またはビューで dob.display コンピューター プロパティを取得しようとすると、オブジェクトが返されます。

this.get('user.dob.display')

{{user.dob.display}}

文字列を返すことを確認する方法はありますか? これは、数日前に 1.0.0-pre2 から 1.0.0-pre4 に更新するまで機能していました。

4

2 に答える 2

4

を使用createしないでくださいcreateWithMixins。これは、オブジェクトの作成時に計算されたプロパティを定義する唯一の方法です。

dob: Ember.Object.createWithMixins({
    day: null,
    month: null,
    year: null,
    display: function () {
        day = (this.get('day') < 10 ? "0" : "") + this.get('day'),
        month = (this.get('month') < 10 ? "0" : "") + this.get('month'),
        year = this.get('year');

        return day + '/' + month + '/' + year;
    }.property('day', 'month', 'year')
})

1 つの注意点: メソッドでプロパティを設定するextend場合、各インスタンスは同じオブジェクトを共有します。それがわからない場合は、Dan Gebhardt が書いた記事「Understanding Ember.Object」を読んでください(この記事は少し古いかもしれませんが、考え方は同じです)。

したがって、ここでは次のようになります。

var user1 = App.User.create().get("dob").set("year", 1988);
var user2 = App.User.create();
console.log(user2.get("dob.year")); // => 1988

インスタンス間で異なるオブジェクトを定義したい場合は、次のinitようにメソッドをオーバーライドする必要があります。

App.User = Ember.Object.extend({
    init: function() {
        this._super(); // do not forget that
        this.set('dob', Ember.Object.createWithMixins({
            // [code ommitted]
        }));
    }
});

ただしdob、ユーザーを作成するたびにモデルを作成するのではなく、モデルを作成することをお勧めします。

これは JSFiddle で試すことができます。

于 2013-01-31T10:41:10.463 に答える
0

pre4 では、作成された Ember.Object で計算されたプロパティを定義できません。

禁止されている

dob: Ember.Object.create({
    day: null,
    month: null,
    year: null,
    display: function () {
        var self = this,
        day = (self.get('day') < 10 ? "0" : "") + self.get('day'),
        month = (self.get('month') < 10 ? "0" : "") + self.get('month'),
        year = self.get('year');

        return day + '/' + month + '/' + year;
    }.property('day', 'month', 'year')
})

拡張されたオブジェクトでのみこれを行うことができます。

dob ロジックで動作するフィドル (abit modified) を作成しました。

http://jsfiddle.net/Energiz0r/AeDAw/4/

于 2013-01-31T10:08:23.267 に答える