2017-08-02 55 views
-1

我是Knockout.js的新手,我發現一個下拉的代碼部分永遠不會被更新。下面是代碼:下拉不更新Knockout.JS

<div class="col-sm-12 col-xs-9"> 
    <select class="bs-select" data-width="100px" data-bind="value: measurement"> 
     <option>Gallons</option> 
     <option>Pounds</option> 
     <option>Days</option> 
    </select> 
</div> 

的Javascript:

var viewModel = function (data) { 
var self = this; 
self.measurement = ko.observable(measurement); 
} 
ko.applyBindings(viewModel) 

無論我選擇從下拉列表中選擇,它顯示爲加侖。如果我更改訂單並首先放入天或磅,即使我改變它,它仍然是天或磅。 讓我知道如果我失去了一些東西。

編輯1:我嘗試將值添加到選項列表。不改變這個問題。

<option value="Pounds">Pounds</option>                    
<option value="Days">Days</option>                    
<option value="Gallons">Gallons</option> 
+1

那麼,這個問題就是缺少你所有的JS。不知道你還錯過了什麼! – Steji

+0

您在'

+0

@Steji爲什麼需要JS的基本下拉功能? – Testing123

回答

1

您可能需要綁定選項。

http://knockoutjs.com/documentation/options-binding.html

這裏是一個小提琴。

https://jsfiddle.net/0o89pmju/24/

<select class="form-control" data-width="100px" data-bind="value: measurement, options: availablemeasurements"> 
    </select> 

JS

function viewModel() { 
    var self = this; 
    this.measurement= ko.observable(''); 
    this.availablemeasurements=ko.observable(['Pounds', 'Day', 'Gallons']); 
} 

如果你不希望使用的選項結合,只是用,似乎工作,以及價值。

<select class="form-control" data-width="100px" data-bind="value: measurement"> 
     <option>Pounds</option> 
     <option>Day</option> 
     <option>Gallons</option> 
    </select> 

這裏是那個小提琴。

https://jsfiddle.net/0o89pmju/25/

+0

是的,是搞清楚是這種情況。我的方法可行嗎? – Testing123

+1

這聽起來很可怕,我保證它不是:)看看綁定,'value'和'options',代碼非常簡單:https://github.com/knockout/knockout/blob/master /src/binding/defaultBindings/value.js和https://github.com/knockout/knockout/blob/master/src/binding/defaultBindings/options.js。這樣你就可以看到簡單的值綁定沒有考慮到的選項中還會發生什麼。您還需要參考'selectExtensions':https://github.com/knockout/knockout/blob/4391eb9b9b5d8b5b481d364f54800585215552b6/src/binding/selectExtensions.js – Milimetric

+0

長話短說,您需要設置下拉列表的值以特定的方式。 – Milimetric

4

這裏是一個工作的jsfiddle你追求的是什麼:

https://jsfiddle.net/njbLqpmq/

HTML:

<div class="col-sm-12 col-xs-9"> 
    <select class="bs-select" data-width="100px" data-bind="value: measurement"> 
     <option value="Pounds">Pounds</option> 
     <option value="Days">Days</option> 
     <option value="Gallons">Gallons</option> 
    </select> 
</div> 

JS:

var viewModel = function (data) { 
    var self = this; 
    self.measurement = ko.observable(); 
} 
ko.applyBindings(viewModel) 
+0

小提琴似乎工作正常。您對代碼做出的任何特定更改?我有相同的代碼,但不適用於我的應用程序。 – Testing123

+0

測量是可觀察的,就像在我的答案中一樣,並且是html綁定的? –

+0

是啊,看起來很相似。檢查我最新的編輯。 – Testing123