3

これは私が今日遭遇したものであり、それが私が間違っていることなのか、それともノックアウトのバグなのか疑問に思っていました。

サーバーからの3つの異なるビューモデル状態があると想像してください。

State 1 = { AnObject: { WithString: "SomeText" } }
State 2 = { AnObject: null }
State 3 = { AnObject: { WithString: "DifferentText" } }

私がこれを行う場合:

<p data-bind="text: AnObject.WithString"></p>

適切なノックアウトバインディングを想定すると、その要素のテキストは「SomeText」、次に何も、次に「DifferentText」であり、3つの状態すべてでKOビューモデルが更新されます。

実際に発生するのは、最初の状態が正常に機能し(テキストが「SomeText」になる)、2番目の状態ではテキストが変更されず、3番目の状態でもテキストが変更されないため、バインディングが完全に失われたように見えることです。使用するのに良い値があります。

この問題を示すJSFiddleは次のとおりです。

http://jsfiddle.net/zAuDs/4/

4

1 に答える 1

4

これは、マッピングプラグインが更新を処理する方法のアーティファクトだと思います。

最初のマッピングで、オブザーバブルが作成されInternalThingます。

2番目のマッピングでは、オブザーバブル全体がビューモデルから削除されます(UIは引き続きそれにバインドされています)。

3番目のマッピングInternalThingでは、UIにバインドされていない、の新しいオブザーバブルが作成されます。

1つのオプションは、強制的に監視可能にし、要素の周囲Objを使用することです。with: Obj

  var ViewModel = function(data) {
      var me = this;
      ko.mapping.fromJS(data, {}, me);
      me.Obj = ko.observable(me.Obj);   

      return me;
  };

次に、次のようにバインドします。

<!-- ko with: Obj -->
<h1 data-bind="text: InternalThing">1</h1>
<!-- /ko -->

サンプル: http: //jsfiddle.net/rniemeyer/bJkKp/

于 2013-01-09T03:17:17.087 に答える