0
我有一个“选项”对象的数组。每个“选项”都包含一个“名称”,“描述”和一个“选定”布尔型字段,用于指示是否选中了它。我已经创建了一个模板来呈现选项,并且页面输出正确无误。布尔属性不触发相关的可观察触发器
但是,我创建的触发器应该捕捉“Selected”字段状态的变化似乎不起作用。如果选项数组以任何方式变化,那么“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>
谢谢。我如何使Selected属性成为一个observable,因为它的属性是属于am数组中的一个项目? – BrightonDev
有几种方法可以做到这一点。可能最简单的方法就是在调用applyBindings之前遍历数组,并为每个项目创建一个可观察值设置为当前值:'item.selected = ko.observable(item.selected);' –
这就是我在视图之外做的事情模型? – BrightonDev