【发布时间】:2013-06-24 21:56:15
【问题描述】:
有没有办法让value 绑定到对象,但让optionsValue 成为对象的属性。到目前为止,如果我同时指定两者,则选择的 optionsValue 属性将填充 value 绑定。我想在 observable 中保持对象完整,但指定要在选择列表值中设置的值。这样,表单提交将发送我选择的optionsValue。
@Html.DropDownListFor(q => q.DivisionId, new SelectList(Enumerable.Empty<string>()), new { data_bind="options: divisions, optionsText: 'Name', optionsValue: 'Id', value: division, optionsCaption: ' - '" })
function AddCrossPoolGameDialog() {
var self = this;
self.divisions = ko.observableArray([]);
self.division = ko.observable();
self.awayDivisionTeams = ko.computed(function () {
var division = ko.utils.arrayFirst(self.divisions(), function(item) {
return self.division.Name() == item.Name;
});
if (division) {
return division.DivisionTeamPools;
}
return [];
});
}
【问题讨论】:
-
为这种行为编写绑定听起来很简单。我不知道内置的方式。另一种方法是简单地为值和提交使用两个不同的属性。另一个问题,如果属性没有真正观察到改变,为什么它是一个可观察的属性?
-
其他一些下拉菜单依赖于它来显示/隐藏。
-
我真的无法理解您的结构,您介意在 jsfiddle 上创建一个非常简化的问题示例并在此处发布代码吗?
-
据我所知,JsFiddle 不允许使用 Razor 语法。你能不能设置一个 @HiddenFor() 或 @TextBoxFor() 等于 DivisonId 并将它的值设置为类似于 selectedDivisionId() 的值?
-
只需复制 Razor 的 output 的 HTML/JS/CSS(reduced 示例!)(您的 asp.net 应用程序是 服务)
标签: knockout.js