【问题标题】:Selected value not working when passing back enum dictionary传回枚举字典时选择的值不起作用
【发布时间】:2015-03-11 14:42:43
【问题描述】:

我正在使用剔除数据绑定创建一个选项列表。基本上在我的服务器端我有一个枚举

public enum CarType
{
    Saloon = 1,
    Hatch = 2,
    Convertable = 3,
    SUV = 4
}

这基本上是在服务器端创建成字典并发送回客户端。

所以上面的枚举会作为一个带有键和值的对象返回给客户端。

我的视图模型是这样的:

this.carName= ko.observable();
this.carType = ko.observable();  

我的选项绑定如下:

<select class="form-control" data-bind="options: $root.carTypes, optionsText: 'value', optionsValue: 'key', value: carType"></select>

所以基本上当我按下编辑按钮时,这个视图将在第一次正确渲染。但是如果我取消编辑页面并重新打开它,它会选择选项列表中的第一个元素。

不确定我是否做错了什么,或者是否敲除与字典的行为不同?

返回的汽车类型对象是下面的字典元素数组示例

[{key="1", value="Saloon"}, {key="2", value="Hatch"}  .......

【问题讨论】:

  • 显示carTypes的实际结构。另外,当您可以从carTypes 中提取汽车名称时,为什么还要同时保留carNamecarType
  • 能否请您发布具有取消的代码以及javascript中的枚举格式是什么
  • 已添加从服务器返回的对象数组。我明天需要发送取消和保存代码。
  • 只是补充一下,我正在使用一个 dialog.js,它与 drundal 一起打包,所以在取消时它只使用 dialog.close ,它是 show 函数的一部分 github.com/BlueSpire/Durandal/blob/master/src/plugins/js/…

标签: c# knockout.js enums


【解决方案1】:

我不确定我是否理解您的问题。您希望避免选择第一个项目吗?如果是这样,请查看文档中的optionsCaptionhttp://knockoutjs.com/documentation/options-binding.html#parameters

选项说明

有时,您可能不想通过以下方式选择任何特定选项 默认。但是单选下拉列表通常以一些开头 项目被选中,那么你怎么能避免预先选择一些东西呢?通常 解决方案是在选项列表前面加上一个特殊的虚拟选项 仅显示“选择一个项目”或“请选择一个选项”或 类似,并且默认选择那个。

这很容易做到:只需添加一个带名称的附加参数 optionsCaption,其值为要显示的字符串。例如:

<select data-bind='options: myOptions, optionsCaption: "Select an item...", value: myChosenValue'></select>

KO 将在项目列表前面加上一个显示文本的项目 “选择一个项目......”并且具有未定义的值。所以,如果 myChosenValue 保存值 undefined (默认情况下可观察到的),然后 将选择虚拟选项。如果 optionsCaption 参数是 可观察的,那么初始项目的文本将更新为 observable 的值发生变化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多