2012-06-27 31 views

答えて

20

さて、これはCoffeeScriptのが持っている落とし穴のものであってもよい:ここでは

class NewsItem 
    content: ko.observable("") 

は、あなたが観測可能なオブジェクトであるプロパティ「コンテンツ」を使用して新しいクラスを作成しています。これは次のJavaScriptにコンパイルされます。

var NewsItem = (function() { 
    function NewsItem() {} 
    NewsItem.prototype.content = ko.observable(""); 
    return NewsItem; 
})(); 

ここからわかるように、プロパティ「content」はプロトタイプに添付されています。つまり、インスタンスごとに1つではなく、作成されるオブザーバブルが1つだけです。したがって、いつでもnew NewsItemを実行すると、コンストラクタはプロトタイプ内のこの単一のオブザーバブルを更新します。したがって、すべてのインスタンスに対して同じ値が更新されます。

これを解決するには、コンストラクタでobservableを作成するだけです。

class NewsItem 
    constructor: (data,dispForm) -> 
     @content = ko.observable data.get_item("content") 

が(関連部分)にコンパイル:その方法は、それがのインスタンスにアタッチ、ないプロトタイプを取得

this.content = ko.observable(data.get_item("content")); 
+0

私は、これは、それが行われるべきか常にあると思います。 – Tyrsius

+0

@Tyrsiusそれは依存しています - 特定のインスタンスごとに独自のクラスメンバーが必要な場合(私は同意する必要があります。あなたは違いを知る必要があります。 – Niko

+3

静的なプロパティが必要な時がありますが、これはルールではなく例外でなければなりません。 – Tyrsius

関連する問題