0

koマッピングプラグインを使用して、JSオブジェクトからオブザーバブルを作成していますko.mapping.fromJS()

オブジェクトのスニペットは以下のとおりです。

{ Name: "blah", Parent: { Title: "blah", Url: "/blah" } }

変更するとParent.Title、ページのすべてが期待どおりに更新されますが、Parentnullになると問題が発生します。プロパティを使用する簡略化されたマークアップはParent次のようになります。

<p data-bind="if: HasParent">Up: <a data-bind="text: ParentTitle"></a></p>

HasParentこのように見えます:

self.HasParent = ko.computed(function () {
    return self.Parent;
});

ParentTitleこのように見えます:

self.ParentTitle = ko.computed(function () {
    return self.HasParent() ? self.Parent.Title() : "";
});

注:selfは、から戻った結果に設定され、ko.mapping.fromJS()を呼び出すことによってページに適用されますko.applyBindings();

したがって、基本的に私の問題は、HasParent関数が常に真の値を返すことです。

また、これは私の最初のkoプロジェクトなので、もっと良い方法で何かできることがあれば教えてください:)

どんな助けでもいただければ幸いです。

ありがとう。

4

2 に答える 2

2

オブザーバブルは関数であるため、実際の値がnullであっても、オブザーバブル自体を見ると真実になります。

バインディングはif計算されたオブザーバブルをアンラップしますが、実際の値(計算されたものと実際のオブザーバブル)を取得するには、ラップを解除する必要がある2つのレベルがあります。

self.Parent()意図したとおりに機能させるために戻ってください。本当にtrue/false値(には必須ではありませんif)が必要な場合は、を実行できます!!self.Parent()

アップデート:

問題は、マッピングプラグインが最も外側のプロパティにのみオブザーバブルを作成することです。したがって、オブザーバブルは作成されますが、は作成されTitleませUrlParent。計算されたオブザーバブルが、nullとpopulatedの間を移動する親に実際に応答するようにする場合は、オブザーバブルである必要があります。

于 2012-05-02T13:32:25.260 に答える
0

親は観察可能ではありません。それはオブジェクトです。HasParentは、オブザーバブルに依存しないため、再評価されることはありません。バインディングをからif: HasParentに変更すると、if: Parent役に立ちます。

于 2012-05-02T21:07:09.823 に答える