2011-09-15 10 views
0

"Option"オブジェクトの配列を持っています。各「オプション」には、「名前」、「説明」、および「選択された」ブールフィールドが含まれ、選択されたかどうかが示されます。私はテンプレートを作成して、オプションとページ出力をすべての場所でうまくレンダリングするようにしました。ブール値のプロパティがトリガ依存の観測可能なトリガでない

しかし、「選択済み」フィールドの状態の変化をキャッチするトリガーは作成されませんでした。 "ajaxTrigger"依存オブザーバブルは、オプション配列が何らかの形で変化した場合でもサーバーへの呼び出しを引き起こすはずですが、そうではないようです。

誰かが間違っているのを誰でも見ることができますか?

JSONデータ:

{ 
    "Name": "Add Helicopter Excursion", 
    "Description": "Enjoy a holiday excursion", 
    "Code": "HEL", 
    "Selected": false 
}, { 
    "Name": "Add Scuba Diving", 
    "Description": "Go on a scuba diving trip", 
    "Code": "SCU", 
    "Selected": false 
} 

ビューモデル:

var viewModel = { 
    // other view model properties removed for this example 
    options: ko.observableArray(@(Html.Raw(Json.Encode(Model.Options)))) 
} 

viewModel.ajaxTrigger = ko.dependentObservable(function() { 
    // other triggers removed for this example 
    this.options(); 
    GetPrices();  
}, viewModel); 

テンプレート:

<script id="OptionsTemplate" type="text/x-jQuery-tmpl"> 
    <li> 
    <input type="checkbox" data-bind="checked: Selected" /> 
    <span data-bind="text: Name"> </span> <span data-bind="text: Description"> </span> 
    </li> 
</script> 

UI:

<ul data-bind='template: {name: "OptionsTemplate", foreach: options}'></ul> 

答えて

1

observableArraysは配列自体の変更を通知するだけです(追加/削除されたアイテム、配列は完全に置き換えられます)。個々の項目のオブザーバブルに対する変更をトリガしません。 dependentObservbaleをトリガーする場合は、Selectedをobservableにして、dependentObservable内の各項目のSelected値にアクセスする必要があります。

+0

ありがとうございました。配列内の項目に属するプロパティを使用して、SelectedプロパティをObservableにするにはどうすればよいですか? – BrightonDev

+0

できることはいくつかあります。おそらくapplyBindingsを呼び出す前にあなたの配列をループするのが最も簡単で、現在の値にオブザーバブルセットを作成します: 'item.selected = ko.observable(item.selected);' –

+0

これはビューの外で行うことですモデル? – BrightonDev

関連する問題