2017-01-11 14 views
0

knockout.jsでtypescriptを使用しています。 1つのケースでは、私のクラスに不変のフィールドが必要です。このフィールドは観測可能でなければなりません。Typescriptで読み取り可能に観察可能

私はコンストラクタで

constructor(data: ITypedInput, isDirty: any) { 
    super(ko.unwrap(data)); 
    this._isDirty = isDirty; 
} 

readonly _isDirty = ko.observable<boolean>(false); 

割り当て値を作成しました。しかし、私は

this._isDirty(true); 

活字体のコンパイラがあること、何も言わなかった別の値を設定したいときそれは許可されていません。

this._isDirty = true; 

コンパイラのような私は設定された値が代入式の

左側定数または読み取り専用プロパティすることができない前記他の場合に 、。

読み取り専用の方法はありますか?

ありがとうございました。

+0

あなたの目的を解決する 'write'コールバックなしで' computedObservable'を作成するでしょうか? Nitzanが述べたように、 'observable'はパラメータを使って値を更新するだけの' function'ですが、現在の値を読むためにはパラメータなしで呼び出さなければならない ' – gkb

+0

' readonly'観測可能性はa bit paradoxical ...観測可能にすることの背後にあるポイントは、あなたがそれを変更して更新が自動的に起こることです。変更したくない場合は、 'readonly'ブール値を「ちょうど」使用することもできます:通常の値は' applyBindings'を実行すると完全にうまく動作します。 – user3297291

答えて

0

Readonlyは、変数の参照を変更できないことを意味します。つまり、オブジェクト自体を変更することはできません。例えば

:プロパティはreadonlyに設定されていてもthis._isDirtyが関数である

class A { 
    public readonly arr: any[] = []; 
} 

let a = new A(); 
a.arr = []; // error Cannot assign to 'arr' because it is a constant or a read-only property 
a.arr.push(4); // fine 

ならば、あなたはそれを呼び出すことができます。

+0

答えはいいえ、私は観察不能に変更することはできませんか? – demo

+0

これは可能ですが、これは、別の観測可能なインスタンスを同じインスタンスに割り当てることができないことを意味します。しかし、いいえ、あなたは観察可能な状態を変えないようにすることはできません。あなたはそれを行う独自のオブザーバブルを作成することができます –

関連する問題