2013-06-11 111 views
0

我需要我的選擇選項有一個值,因爲我張貼表單回到服務器和asp.net mvc將需要知道的價值。如果我綁定並將'value'設置爲對象的實例,我想這樣做是因爲其他綁定從所選對象值中讀取,那麼這些選項沒有html值屬性。值屬性是表單提交時所需要的。如果我設置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: ' '"> 

回答

0

這是他們需要將此綁定功能添加到淘汰賽的另一個重要原因。您不應限制在綁定到值對象或valueOption之間進行選擇。

你已經列出了計算的可觀察方法,我可能會採取;使用optionsValue綁定打開,然後添加一個計算的observable,以保持選定的對象

您還可以做一些更加費勁的事情,並在表單提交上註冊一個回調,然後動態插入該值,以便將其分開。 ..

0

最後我添加了一個新的計算觀察值,當值進來時,我從數組中找到該項並手動將其設置在我的視圖模型上。

<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 
       }); 
0

我將採取略有不同的方法。將meetingEventId和meetingEvent屬性保留爲observable,但將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);   
});