2016-11-09 9 views
1

Knockoutでビューモデルデータにバインドするのが難しいです。アプリケーションの中にバインドするものもあれば、ネストされた配列をバインドするものはありません。KnockoutJSで配列をバインドするのが難しい

MVCEとして問題を再現しようとして、this jsFiddleを作成しました。しかし、現在のアドレス部分が全く機能しないため、MVCEは実際のコードよりもさらに機能します。私はこれがjsFiddleの何かに不慣れであることを望んでいる。

それは次のように見えるASP.NETでのWebAPIの呼び出し(非MVCEのテキストは削除)から返されるJSONです:ページが新規または編集シナリオで使用することができますので、私はその後、

'{"CurrentAddress":{"ResidentFrom":2010,"Address":{"OfNoFixedAbode":false,"Line1":"A","Line2":"B","Line3":"C","Line4":"D","Line5":"E","PostCode":"3C"},"FullAddress":"A, B, C, D, E, 3C"},"HasPreviousAddresses":true,"PreviousAddresses":[{"ResidentFrom":2004,"ResidentTo":2010,"Address":{"OfNoFixedAbode":false,"Line1":"K","Line2":"L","Line3":"M","Line4":"N","Line5":"O","PostCode":"2B"},"FullAddress":"K, L, M, N, O, 2B"},{"ResidentFrom":1998,"ResidentTo":2004,"Address":{"OfNoFixedAbode":false,"Line1":"F","Line2":"G","Line3":"H","Line4":"I","Line5":"J","PostCode":"1A"},"FullAddress":"F, G, H, I, J, 1A"}]}'; 

ViewModelにに変数を入れて

if ((serverModel !== null) || (serverModel !== undefined)) { 
    SetValues(viewModel, serverModel); 
} 

SetValues試みを、それはすべてのかなり簡単なものです:テストは次のように。実際には何らかのマッピングlibを使用する必要がありますが、私は最初にそれを動作させる基本バージョンを取得することを考えています。

全体のコードは、以前jsFiddle

EDIT 2016年11月9日 は、私は、スタンドアロンのファイルにこのすべてを入れて、F12を通してそれを実行しました言及で見ることができます。次のように私は戻って取得エラーです:

"Unable to process binding \"value: function(){return CurrentAddress().Address().ResidentFrom }\"\nMessage: Function expected" 
+1

(!おっと、私はあなたのオリジナルのものを更新。)このfiddleを参照してください - あなたは)viewModel.PreviousAddresses.push(previousAddress) 'に') '余分を持っている;' jsFiddleに。 – alex

+0

修正済み、悲しいことに違いはありませんが、ありがとう! – noonand

+1

Hmm ... 'SetValues()'が呼び出されたときに、 'serverModel.CurrentAddress == undefined'の' CurrentAddress() 'のコンストラクタに' serverModel'を渡す前に 'serverModel'をデシリアライズしていません。 – alex

答えて

1

だから、ここで起こって多くのものがあります。..

あなたはJSONをパースした後まず、CurrentAddressオブジェクトが観察できるように作成されていません。そこで、以下のようなすべてのバインディングを変更する -

<label data-bind="value: CurrentAddress.Address().ResidentFrom"></label> 

はまた、私はあなたがFullAddressという名前のプロパティを定義していないが、あなたはあなたのバインディングでそれを使用していることを観察しました。それはあまりにもエラーを投げていた。

FYI

+0

私が見つけたフォーマットは次のとおりでした: noonand

+0

私はjsFiddleを完全に動作するバージョンで更新しました。私は答えとしてこれを授与していますが、完了していない間に私をフィニッシュラインに乗せていくのに十分なナッジを与えました。私がそれを再統合すると、フィンガーがフィディドの作品を​​越えました。 – noonand

関連する問題