30

私はノックアウトの初心者ですが、いつ使用するかについて混乱することがよくあります()()現時点では試行錯誤しているだけなので、いつ使用しないのか、いつ使用しないのかについての一般的なヒント/コツはありますか。バインディングがエラーをスローするか、値を更新しない場合は、削除し()ます。それ以外の場合は削除します。

4

3 に答える 3

55

既存の回答は、非常に重要な混乱のポイントである属性をスキップしているように感じdata-bindます。

Javascriptを使用していて、オブザーバブルを取得または設定しているときに、parensを使用するのは事実です。しかし、あなたが書いているとき、あなたはオブザーバブルで働いているときでさえdata-bind="text: property"、parensを省きます。

編集

以下のコメントに記載されているように、式であるバインディング、またはobservbleのアクセスプロパティには、parensが必要です。

visible: personName().length > 0
visible: person().Name().length > 0
visible: person().isVisible

person最後のプロパティは両方ともisVisisble監視可能ですが、最後のプロパティは親を使用しないことに注意してください。これは、オブザーバブルではなく値をバインディングに渡し、更新されないためです。

于 2013-06-02T03:50:15.940 に答える
21

()オブザーバブルを使用するとき、または他のメソッドを実行するときに、ノックアウトで使用します。ノックアウトオブザーバブルは関数であり、探しているものを返したり、新しい値を割り当てたりするために呼び出されます。

ノックアウトではobject.property()、値を取得し、object.property(newValue)そのプロパティに値を割り当てるために使用します。

ノックアウトWebサイトで、ドキュメント、特にオブザーバブル()に関するセクションをチェックアウトします。これは、オブザーバブルをクエリおよび作成するときの使用法を示しています。

引用するには:

var myViewModel = {
    personName: ko.observable('Bob'),
    personAge: ko.observable(123)
};
  • オブザーバブルの現在の値を読み取るには、パラメーターなしでオブザーバブルを呼び出すだけです。この例では、myViewModel.personName()は'Bob'を返し、myViewModel.personAge()は123を返します。

  • observableに新しい値を書き込むには、observableを呼び出し、新しい値をパラメーターとして渡します。たとえば、myViewModel.personName('Mary')を呼び出すと、名前の値が'Mary'に変更されます。

  • モデルオブジェクトの複数の監視可能なプロパティに値を書き込むには、連鎖構文を使用できます。たとえば、myViewModel.personName('Mary')。personAge(50)は、名前の値を' Mary'に変更し、年齢の値を50に変更します。

Knockoutのインタラクティブなチュートリアルも非常に素晴らしく、一読する価値があります。

于 2012-06-12T12:01:14.813 に答える
3

基本的に、監視可能な値(配列など)を操作するときは常に、括弧を使用して値を取得し、値を設定する必要があります

var something = ko.obserbable();
something(5); //set value
console.log(something()); //get value: 5

その理由は、ほとんどのJS実装はプロパティのゲッターとセッターをまだサポートしていないため、この制限を回避するためにオブザーバブルがこのように実装されました。

于 2012-06-12T12:03:19.303 に答える