簡體   English   中英

Knockout.mapping下拉列表,獲取選定的值

[英]knockout.mapping drop down list, get selected value

我有一個問題,了解我應該如何獲取我使用剔除(nockout.mapping)綁定的選擇(下拉)列表的selectedValue。

這是ajax調用和映射:

 var EmailCollection;
 function GetAllEmailsAjax() {

            $.ajax({
                url: "http://localhost:54756/api/Email",
                type: "GET",
                dataType: "JSON",

                success: function (data) {
                    GetAllEmails(data);
                }
            });            
        }
        function GetAllEmails(data) {
            // not sure if this is 100% correct but it does seem to work as expected
            if (!EmailCollection) {
                EmailCollection = ko.mapping.fromJS(data);
            }
            ko.mapping.fromJS(data, EmailCollection);
            ko.applyBindings(EmailCollection);
        }
<select data-bind="options: EmailCollection, optionsText: 'Name', optionsValue: 'Id', optionsCaption: 'Choose...'"></select>

據我了解,我需要在select data-bind屬性中指定值。 所以會是這樣的:

但是,這意味着selectedEmail將需要成為我的模型的一部分。 但是,由於所有這些都是由基因敲除創建的,因此我不確定我該怎么做。 我正在假設一種類似下面的模型,但是我不確定如何去做。

var EmailViewModel = {
   selectedEmail : ko.Observable(),
   Emails : EmailCollection // the previous model mapped bound in a scenario like this
};
// EmailViewModel.selectedEmail() would then contain my selected value..

我敢肯定,一旦我在紙上看到它,一切都會在我努力解決之時變得顯而易見。

如果只選擇一封電子郵件(由於使用下拉菜單而隱含),則應創建一個變量來保存所選的電子郵件ID。 如果它默認為集合中的第一封電子郵件,則您將執行以下操作:

var selectedEmailId: ko.observable();
...
function GetAllEmails(data) {
...
ko.mapping.fromJS(data, EmailCollection);
selectedEmailId(EmailCollection.peek().Id); //Assuming EmailCollection is an array
ko.applyBindings(EmailCollection);
}

<select data-bind="options: EmailCollection, optionsText: 'Name', optionsValue: 'Id',
    optionsCaption: 'Choose...', value: selectedEmailId"></select>

然后,只要更改下拉菜單,就應該更新selectedEmailId。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM