【问题标题】:Pre-selecting a dropdown list item in knockout在淘汰赛中预选下拉列表项
【发布时间】:2013-02-14 15:19:48
【问题描述】:

我正在尝试通过下拉列表更新对象上预先存在的属性。该解决方案使用了 knockout 和 ko.mapping 框架来获取其数据。我遇到的问题是选择现有对象已经设置的列表中的项目。

例如:如果下拉列表包含 2 个选项,假设第一个男性和第二个女性,并且它所代表的属性已经设置为女性,我希望下拉列表选择女性。但下拉列表默认为列表中的第一项(男性)并将底层对象更新为男性。

我已经完成了上述的一个简单示例,我已经模拟了数据以匹配我正在处理的内容,即来自服务器的 json 使用 ko.mapping 框架进行映射。

视图模型

var listItems = '[{"id": "1","name": "male"},{"id": "2","name": "female"}]';
var savedRecord = '{"gender": {"id": "2","name": "female"}}';

ViewModel = function () {
    mappedListItems = ko.mapping.fromJSON(listItems);
    mappedSavedRecord = ko.mapping.fromJSON(savedRecord);
}

ko.applyBindings(new ViewModel());

html

<select data-bind="options: mappedListItems, 
               optionsText: 'name',                    
               value: mappedSavedRecord.gender"></select>
<p>mappedSavedRecord.gender.name = <span data-bind="text: mappedSavedRecord.gender.name"></span>

JsFiddle

http://jsfiddle.net/tgriley1/tLHhE/

【问题讨论】:

  • 您不需要指定optionsValue,因此您可以在选择中包含复杂的对象,您只需要以不同的方式设置您的 mappedSavedRecord jsfiddle.net/xgKvx/1。 KO 通过引用比较复杂对象,因此您的mappedSavedRecord 应该包含来自mappedListItems 的实际项目。 id和gender一样还不够……
  • @nemesv 有趣的是,我已经尝试过这种方法,但是由于包含性别属性的对象有更多的事情发生,我只想设置性别属性,由于某种原因我不能t 工作。参见小提琴例如jsfiddle.net/tgriley1/9nzr4

标签: javascript html knockout.js knockout-mapping-plugin


【解决方案1】:

您没有告诉 Knockout 将哪个字段用于下拉列表中的 value 属性,也没有告诉它保存记录中的哪个字段用于预选选项:

<select data-bind="options: mappedListItems, 
                   optionsText: 'name',
                   optionsValue: 'id',                                      
                   value: mappedSavedRecord.gender.id"></select>

【讨论】:

  • 好吧,太好了,我曾尝试设置 optionsValue 但将该值保留为整个性别对象。所以一个select绑定也可以绑定一个对象数组但是只能输出一个值,而不是每个对象代表的整个对象?
  • @tom 我不明白你怎么会错过这个。
  • 不知道我明白你在问什么。您可以将一个对象绑定到它,但您需要告诉它哪个属性用于选项值以及哪个属性用于选项文本。如果您想预先选择一个选项,您需要告诉它您希望它与哪个值进行比较。
  • @Boss 这有点苛刻,我敢肯定,当我们开始使用新的技术/框架时,我们都编写了一些遗漏的代码。
  • @paul 我不知道如何表达。我同意每个人都会犯错误。但他仍然期望获得整个对象的价值。他没有在 firebug 中检查选项值是否为空的输出。
猜你喜欢
  • 1970-01-01
  • 2012-01-17
  • 2023-03-08
  • 1970-01-01
  • 2015-08-15
  • 2015-11-05
  • 1970-01-01
  • 2016-11-23
  • 2016-05-27
相关资源
最近更新 更多