オブジェクトをいくつかのフィールドとリストで構成した.Netからモデルをビューモデルに渡しました。それらはそれぞれ別のリストを持ちます。ノックアウト観察可能な観測可能な配列の配列
リストのリストを持つオブジェクトです。
私の見解では、私はこれをいくつかのデータとして、タブのリスト(最初のリスト)で表し、各タブにはデータのグリッドがあります。私のノックアウトビューモデルで
は、私は持っている:
self.Name = ko.observable("");
self.Width = ko.observable(0);
self.Height = ko.observable(0);
self.TemplateGroups = ko.observableArray();
ので、観察可能な配列との私の主な目的、(最初のリスト)。しかし、その中のリストは、観察可能ではありません。
私tablsをレンダリングするときに、私が行います
<div class="tab-content" data-bind="foreach: TemplateGroups">
そして、それは、それぞれのタブをレンダリングします。
<tbody data-bind="foreach: $data.Components">
<tr style="cursor: pointer" data-bind="click: $parents[1].ClickedIt">
が
問題は、私のClickIt関数に、私はIdof表示しています、です(「コンポーネント」の外側のリスト内のリストの名前です):そして、それぞれのタブの中に、私はこれを行います行をクリックして、それは動作します。そして私はちょうどこの外リストの「説明」フィールドを変更しようとしていますが...それは決して認められ、機能はありませんん、そう:
self.ClickedIt = function() {
alert(this.Id);
this.Description("Craig");
}
警告は、IDを示しているが、説明上のエラーは( "クレイグ")、それは機能ではないので。
私のObservableArray内のリストを観測可能にするにはどうすればよいですか?
(私が渡したモデルは、TemplateGroupsというリストを含むオブジェクトで、そのリストの各アイテムには「コンポーネント」という名前のリストが含まれています。私が表示しているコンポーネントですが、そのリストを作成する必要がありますObservable
編集:これは私が探しているものです(http://jsfiddle.net/rniemeyer/bZhCk/)...私は同じ方法で配列を定義していません。彼らは.Netクラスから継承されています(つまり、JSONに変換されています).NetクラスにはListを持つ別の.Netクラスのリストが含まれています。
注マイ負荷方法は:
self.loadData = function() {
$.get("/api/PlateTemplate/Get", { id: self.TemplateId() }).done(function (data) {
self.Name(data.Description);
self.Width(data.Width);
self.Height(data.Height);
self.TemplateGroups(data.PlateTemplateGroups);
});
}
self.TemplateGroups' 'の内容は観察できません。それらは普通のjavascriptオブジェクトです。おそらく、マッピング・プラグイン(http://knockoutjs.com/documentation/plugins-mapping.html): 'self.TemplateGroups(ko.mapping.fromJS(data.PlateTemplateGroups))'を 'self.loadData '。このようにして、すべてのプロパティが観測可能になります。 –
@JoseLuis - パーフェクト!うわー、ありがとう!それは完璧に働いています。 View Modelのデータを同じ構造に戻したい場合、View Modelを、受け取ったのと同じ構造に、更新された値でマップする方法はありますか?だから、「toSSON」のように?また、あなたが答えを作ることができれば、私はそれを受け入れることができます。ありがとう! (もう一度!) – Craig