更改下拉列表更改时的可观察值Knockout Js

Ove*_*ine 11 data-binding observable knockout.js

我有这个下拉列表,如果车辆是新的或使用过,可以选择.

<select name="VehicleType" id="vehicleTypeDropdown" data-bind="value: VehicleType">    
    <option value="New" selected="selected">Nuevo</option>
    <option value="Used">Usado</option>
</select> `
Run Code Online (Sandbox Code Playgroud)

这个输入:

<input type="text" name="Mileage" data-bind="disable: VehicleType() === 'New',value:  Mileage" class="input-large"> `
Run Code Online (Sandbox Code Playgroud)

如果所选下拉列表中的值为New,则必须禁用输入,如果使用,则应启用输入,但如果我输入值,则observable将获取此值,如果我将下拉值更改为new,则observable必须为零.

RP *_*yer 22

在视图模型中手动订阅是处理这类事情的好方法.订阅可能如下所示:

this.VehicleType.subscribe(function(newValue) {
    if (newValue === "New") {
        this.Mileage(0);
    }
}, this);
Run Code Online (Sandbox Code Playgroud)

以下是使用它的示例:http://jsfiddle.net/rniemeyer/h4cKC/

HTML:

<select name="VehicleType" id="vehicleTypeDropdown" data-bind="value: VehicleType">
    <option value="New" selected="selected">Nuevo</option> 
    <option value="Used">Usado</option> 
</select>

<input type="text" name="Mileage" data-bind="disable: VehicleType() === 'New', value: Mileage" class="input-large">
<hr/>

<pre data-bind="text: ko.toJSON($root, null, 2)"></pre>
Run Code Online (Sandbox Code Playgroud)

JS:

var ViewModel = function() {
    this.VehicleType = ko.observable();
    this.Mileage = ko.observable();

    this.VehicleType.subscribe(function(newValue) {
        if (newValue === "New") {
            this.Mileage(0);
        }
    }, this);
};

ko.applyBindings(new ViewModel());
Run Code Online (Sandbox Code Playgroud)

  • @RP - 另一个宝石!能够根据自己的需要调整它,使用它将文本字段设置为值,给定下拉值.谢谢!显然,KnockOut JS文档必须缺乏,因为到目前为止我还没有看到`.subscribe()`. (2认同)