布尔属性不触发依赖的可观察触发器

时间:2011-09-15 10:11:58

标签: knockout.js

我有一个“选项”对象数组。每个“选项”包含“名称”,“描述”和“选定”布尔字段,以指示其是否已被选中。我创建了一个模板来呈现选项,页面输出很好,一切就绪。

但是,我创建的触发器应该捕获“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>

1 个答案:

答案 0 :(得分:1)

observableArrays仅通知对数组本身的更改(添加/删除的项目,完全替换数组)。它不会触发对单个项目的可观察量的更改。如果你想要依赖dependentObservbale,那么你需要使Selected成为一个可观察的,并确保你访问dependentObservable中每个项目的Selected值。

相关问题