2016-09-29 15 views
1

nullであるko.jsにknockout.js HTMLオプションを表示するデフォルト値に観察下に

HTMLをドロップダウンをバインドするために私のコードですすべての値とともに表示されます。

値も正常に保存できます。

問題は私は任意の値を選択していけない

、デフォルト値はNoneです。 DBにこのフィールドの値がない場合(null)、デフォルトのオプション値を"None"として表示したいとします。 I

var _selectedPart = ko.observable(); 
var itemSelected = // get value from DB; 

if (itemSelected) { 
    _selectedPart(parnerSelected);// works fine // 
} else { 
    // select Default option value as "None" 
} 

は、HTML内のNULLをチェックするを試してみました。コードの下、doesntの仕事:デフォルトoptionsCaptionをトリガするためにundefinedへの観察可能な値を設定し

<select data-bind="options: myList, value: selectedPart == null ? 'None' : selectedPart "></select> 
+0

あなたは_selectdPartnerのあなたの定義を追加することはできますか? –

+0

申し訳ありません、それはタイプミスでした。私は今編集しました。 _selectedPartは、ドロップダウンの選択された値をバインドする観測可能です。 – user2598808

答えて

1

function Sample() { 
 
    var self = this; 
 
    
 
    this.myList = ['A', 'B', 'C']; 
 
    this._selectedPart = ko.observable(); 
 
    
 
    this.selectFromDB = function() { 
 
     // random item to simulate "get from DB" 
 
     var randomIndex = Math.floor(Math.random() * this.myList.length); 
 
     var value = self.myList[randomIndex]; 
 
     self._selectedPart(value); 
 
    }; 
 
    this.reset = function() { 
 
     self._selectedPart(undefined); 
 
    }; 
 
} 
 

 
ko.applyBindings(new Sample());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script> 
 

 
<button data-bind="click: selectFromDB">Select Item</button> 
 
<button data-bind="click: reset">Reset</button> 
 
<br> 
 
<select data-bind="options: myList, value: _selectedPart, optionsCaption: 'None'"></select>

あなたは、if /他のこのようなを取り払うことで、あなたのコードを簡素化することができます。

var itemSelected = // get value from DB; 
_selectedPart(itemSelected || undefined); 
+0

Tomalakありがとう!私はこのアプローチを試みました。データベースに空の値が含まれている場合でも、ドロップダウンは「なし」を選択するのではなく、使用可能なリストの最初のオプションを選択しています。デフォルト値はNoneです。 – user2598808

+0

選択ボックスをデフォルト値に設定する方法を説明しました。私の答えでコードサンプルを実行します。それは働いている。それがあなたのために働かないならば、あなたは何か違うことをしています。違いを見つける。 – Tomalak

+0

データベースからの値が未定義の場合、ドロップダウンは "なし"を選択しません。 – user2598808

0

nullではないので、あなたのデータバインドにvalueAllowUnsetを追加する必要がありますバインドされた配列:

<select data-bind="options: myList, 
        value: _selectedPart, 
        optionsCaption: 'None', 
        valueAllowUnset: true"></select> 

はこちらをご覧ください:

http://knockoutjs.com/documentation/value-binding.html#using-valueallowunset-with-select-elements

+0

ありがとうジョナサン。私はこのアプローチを試みました。それでも、運がない...データベースに値が保存されていない場合は、選択した値(デフォルト値)として「なし」オプションが表示されます。代わりに、ドロップダウンリストに最初の値を表示しています。 – user2598808

関連する問題