敲除与重复序列结合:最初选择的值被重写(Knockout with repeat binding:

2019-10-18 12:00发布

我有一个选择预设值selectedValue其中有“火腿”的值。 我有3个选择“垃圾邮件”,“火腿”,“奶酪”。

当应用视图模型中,“火腿”的价值选择 ,但selectedValue失去它的价值,所以“火腿”实际上没有选择,尽管这似乎是。

我需要做什么改变,以允许selectValue保留它的初始值? 这里的的jsfiddle

HTML

<select data-bind="value:selectedValue">
   <option data-bind="repeat: values" 
        data-repeat-bind="value: $item(), text: $item()">
   </option>
</select>
<br>selectedValue: <span data-bind="text:selectedValue"></span>

视图模型

var viewModel = function () {
    this.selectedValue = ko.observable("ham"); //initial value has been chosen.
    this.values = ko.observableArray(["spam", 'ham', 'cheese']);
    this.showMeSelectedValue = function(){alert(this.selectedValue())};
};

ko.applyBindings(new viewModel());

注:我使用的是重复的结合https://github.com/mbest/knockout-repeat 。 我通常会使用常规选项约束力,但我需要重复约束力的选择标签的工作。

Answer 1:

还有,你可以处理这个几个不同的方式。 我认为,一个简单的方法是使用自定义绑定适用首先结合其子。

下面是一个例子:

ko.bindingHandlers.bindChildren = {
    init: function(element, valueAcessor, allBindings, vm, bindingContext) {
        //bind children first
        ko.applyBindingsToDescendants(bindingContext, element);

        //tell KO not to bind the children itself
        return { controlsDescendantBindings: true };
    }
};

现在,你可以指定:

<select data-bind="bindChildren: true, value: selectedValue">
    <option data-bind="repeat: values" data-repeat-bind="value: $item(), text: $item()"></option>
</select>

下面是一个例子: http://jsfiddle.net/rniemeyer/r9kPm/



文章来源: Knockout with repeat binding: Initially selected value being overwritten