如何获得淘汰选择使用值和valueOption

时间:2013-06-11 23:35:14

标签: asp.net-mvc-4 knockout.js knockout-2.0

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

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

感谢,

选项没有价值;

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

选项具有值但是在选中时,它是被推入值的meetingEventId,因此没有其他控件绑定到的其他属性。

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

3 个答案:

答案 0 :(得分:0)

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

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

您还可以做一些更加费劲的事情,并在表单上注册回调,然后动态插入值,以便它将分开... ...

答案 1 :(得分: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
                });

答案 2 :(得分:0)

我会采取略有不同的方法。将meetingEventId和meetingEvent属性保持为observables,但添加对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);        
});