我有一个“选项”对象数组。每个“选项”包含“名称”,“描述”和“选定”布尔字段,以指示其是否已被选中。我创建了一个模板来呈现选项,页面输出很好,一切就绪。
但是,我创建的触发器应该捕获“Selected”字段的状态更改似乎不起作用。如果options数组以任何方式发生变化,那么“ajaxTrigger”依赖的observable应该触发对服务器的调用,但这似乎并非如此。
谁能看到我出错的地方?
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>
答案 0 :(得分:1)
observableArrays仅通知对数组本身的更改(添加/删除的项目,完全替换数组)。它不会触发对单个项目的可观察量的更改。如果你想要依赖dependentObservbale,那么你需要使Selected
成为一个可观察的,并确保你访问dependentObservable中每个项目的Selected
值。