2

ビューモデルがあります

function ViewModel() {
    this.applications = ko.observable(10);
    this.applicationsText_computed = ko.computed(function () {
        return "You have " + this.applications() + " applications";
    });
    this.applicationsText_classinc = function () {
        return "You have " + this.applications() + " applications";
    };
};
var viewModel = new ViewModel();
ko.applyBindings(viewModel);


<p data-bind="text: applicationsText_computed()"></p>
<p data-bind="text: applicationsText_classic()"></p>

applications両方の段落は、観察可能なものを変更するとテキストを変更します。

ko.computedでは、aと classinc 関数の使用の違いは何ですか?

4

2 に答える 2

2

はい、変更すると両方の段落が変更されapplicationsます。これは、ノックアウトによって作成された暗黙の計算オブザーバブルによるものです。これは、HTML マークアップに書き込むのと似ています
<p data-bind="text: 'You have ' + applications() + ' applications'"></p>
。3 つのケースすべてで、ノックアウトは計算されたオブザーバブルを作成し、それがオブザーバブルに依存していることを追跡しますapplications。したがって、「計算された」関数と「古典的な関数」の両方が、暗黙的な計算されたオブザーバブルにつながります。XGreen が指摘したように、computed を使用する正しい方法はtext: applicationsText_computed.

したがって、この単純なケースでは、「クラシック関数」を使用できます。私としては、ここだけならhtmlマークアップで書いた方が簡単です。しかし、重要な点が 2 つあります。最初に、私が言ったように、とにかく計算されたオブザーバブルが明示的または暗黙的に作成されます。2 つ目は、計算されたオブザーバブルにはより多くの機能があるということです。たとえば、コードで明示的にサブスクライブできます: applicationsText_computed.subscribe(function(newValue) {...}).
さらに、明示的な読み取りおよび書き込みアクセサーを使用してオブザーバブルを作成できます。ドキュメントで別のことを確認してください。したがって、計算されたオブザーバブルは単なる関数とはまったく異なります。

于 2013-04-29T09:34:26.320 に答える