0

我需要我的选择选项有一个值,因为我将表单发布回服务器并且 asp.net mvc 将需要知道该值。如果我绑定并将“值”设置为对象的实例,我想要这样做,因为其他绑定从选定的对象值中读取,那么选项没有 html 值属性。value 属性是提交表单时需要的。如果我设置 optionsValue 并将其指向项目的 id,那么它会覆盖我的值绑定,并且我会收到该对象没有我绑定的属性的错误。

我可以在计算类型上使用读/写选项进行设置,但我想知道是否没有更简单的方法。

谢谢,

期权没有价值;

 <select data-bind="options: $root.meetingEvents,
                    value: $data.meetingEvent,
                    optionsText: 'meetingEventName',
                    optionsCaption: ' '">

Options have value but when selected it's the meetingEventId that is pushed into value and therefor doesn't have the other properties which I have other controls bound to.

<select data-bind=" options: $root.meetingEvents,
                    value: $data.meetingEvent,
                    optionsText: 'meetingEventName',
                    optionsValue: 'meetingEventId'
                    optionsCaption: ' '">
4

3 回答 3

0

我会采取稍微不同的方法。将 meetingEventId 和 meetingEvent 属性保留为可观察对象,但添加对 meetingEventId 的订阅,该订阅会在 meetingEventId 更改时更新 meetingEvent。

HTML

    <select data-bind=" options: $root.meetingEvents,
                value: $data.meetingEventId,
                optionsText: 'meetingEventName',
                optionsValue: 'meetingEventId'
                optionsCaption: ' '">

Javascript

this.meetingEventId = ko.observable('');
this.meetingEvent = ko.observable(null);

this.meetingEventId.subscribe(function(){
    var meetingEventId = this.meetingEventId();
    var meetingEvent = ko.utils.arrayFirst(vm.meetingEvents(), function (item) {
        return meetingEventId === item.meetingEventId();
    });

    this.meetingEvent(meetingEvent);        
});
于 2013-06-14T02:36:43.473 回答
0

最后,我添加了一个新的计算 observable,当值进来时,我从数组中找到项目并在我的视图模型上手动设置它。

<select data-bind=" options: $root.meetingEvents,
                    value: $data.meetingEventId,
                    optionsText: 'meetingEventName',
                    optionsValue: 'meetingEventId'
                    optionsCaption: ' '">

//添加到视图模型

 this.meetingEventId = ko.computed({
                    write: function (value) {
                        var meetingEvent = ko.utils.arrayFirst(vm.meetingEvents(), function (item) {
                            return value === item.meetingEventId();
                        });

                        this.meetingEvent(meetingEvent);
                    },
                    read: function() {
                        return this.meetingEvent() ? this.meetingEvent().meetingEventId : "";
                    },
                    owner: this
                });
于 2013-06-12T15:21:53.963 回答
0

这是他们需要在淘汰赛中添加此绑定功能的另一个重要原因。您不应受限于在绑定到值对象或 valueOption 之间进行选择。

您已经列出了我可能会采用的计算可观察方法;使用 optionsValue 绑定打开,然后添加一个计算的 observable 来保留选定的对象

您还可以做一些更费力的事情,并在表单提交上注册一个回调,然后动态插入该值,以便它将与帖子分开......

于 2013-06-12T03:09:18.370 回答