3

オブジェクトの観察可能なプロパティが最後のオカレンスによって上書きされているように見えるユーザー オブジェクトのプロトタイプを作成する Knockout に問題があります。

したがって、同じオブジェクトを複数回使用することはできません。そうしないと、上書きされます。

これを説明するのは難しいですが、私のフィドルを見てください。

http://jsfiddle.net/RSEcj/1/

私は何を間違っていますか?(または、これは Knockout のバグですか?) どうすれば問題を解決できますか?

4

3 に答える 3

7

オブザーバブルは関数であり、プロパティではないため、設定時にオブジェクトに作成されるプロパティとは異なり、オブジェクト プロトタイプの単一のインスタンスによって表されます。

機能継承を使用して、目的を達成できます。

http://jsfiddle.net/ypWQN/1/

var User = function(firstName, lastName){
    var that = {};

    that.firstName = ko.observable(firstName);
    that.lastName = lastName;

    return that;
};


var Employee = function(firstName, lastName){
    var that = User();

    that.firstName(firstName);
    that.lastName = lastName; 

    return that;
};

お役に立てれば。

于 2012-05-09T17:00:02.813 に答える
2

ここに良い解決策があります:http://jsfiddle.net/magikMaker/RSEcj/19/

これは、新しいメソッド inheritsFrom() を使用します。この功績はhttp://phrogz.net/js/classes/OOPinJS2.html

これを apply() メソッドと init() メソッドと組み合わせると、魔法が起こります... :-)

var Person = function(firstName, lastName){

    this.init = function(firstName, lastName){
        this.firstName = ko.observable(firstName);
        this.setLastName(lastName);
    };

    this.setLastName = function(lastName){
        this.lastName = lastName;
    };

    this.init.apply(this, arguments);
};

var Child = function(firstName, lastName){
    this.init.apply(this, arguments);
};

Child.inheritsFrom(Person);
于 2012-05-09T21:00:52.630 に答える