如何检查Knockout中选择列表项的值?

时间:2014-05-27 14:59:42

标签: knockout.js

如果选择了点,我需要隐藏/显示某些div。当我执行以下操作时,我得到一个JS错误,即PlanMetric为null:

我有一个MVC模型:

  public int PlanMetric {get; set;}

  //this is in a setter method    
  IEnumerable<SelectListItem> Metrics = new List<SelectListItem>
  {
      new SelectListItem {Text = "Foo", Value = "1"},
      new SelectListItem {Text = "Bar", Value = "2"}
  };

在我的页面上:

    @Html.LabelFor(x => x.PlanMetric)
    @Html.DropDownListFor(x => x.PlanMetric, 
                          Model.Metrics, new { 
                          data_bind = "value: PlanMetric, 
                          options: Metrics, 
                          optionsText: 'Text',
                          optionsValue: 'Value'"  })

在我的_layout页面中,我有:

  //Merge JS/MVC View Model
        var vmMVC = ko.mapping.fromJSON(
                   '@Html.Raw(JsonConvert.SerializeObject(
                              Model, Formatting.None,
                              Constants.JsonDatabaseSettings))');
        var vmJS = new ViewModel();

        var vm = ko.mapping.fromJS(vmJS, vmMVC);

        ko.applyBindings(vm);

然后在我的JS View Model中我有:

      var self = this;
self.isPointsSelected = ko.computed(function() {
    return vm.PlanMetric() == 2;
});

为什么没有将所选项目的值绑定到PlanMetric?

1 个答案:

答案 0 :(得分:1)

在此代码中将vm替换为self

var self = this;
self.isPointsSelected = ko.computed(function() {
    return vm.PlanMetric() == 2; // <-- should be return self.PlanMetric() == 2;
});