knockout observable array设置选定的值

时间:2011-10-21 06:21:14

标签: javascript knockout.js observable ko.observablearray

我正在尝试使用knockout data-bind选项填充“Select”以获取值列表,并默认将其中一个值设置为“selected”。

有两个服务器请求,

  1. 获取值列表(dataRepository.GetLifelines)
  2. 从列表中将其中一个值设置为Selected。 (dataRepository.GetMockSelectedLifeline)
  3. 第一项要求已得到解决。数据绑定到选择正常工作与“选定”值。

    我在设置列表中的默认“选定值”时遇到问题。有人可以帮帮我吗。方法是 this.selectValue 。它试图将selectedLifeline设置为匹配的“名称”。

        function LifelineViewModel() {
        this.lifelines = ko.observableArray([{}]);
        this.selectedLifeline = ko.observable();
    
        this.updateData = function (data) {
            var boundUpdate = bind(function (value) {
                this.lifelines.push(value);
            }, this);
    
            $.each(data, function (index, item) {
                boundUpdate(item);
            });
            dataRepository.GetMockSelectedLifeline(bind(this.selectValue, this));
        }
    
        this.selectValue = function (data) {
            this.selectedLifeline = ko.utils.arrayFirst(this.lifelines, function (lifeline) {
                return lifeline.Name === data.Name;
            });
        }
    }
    
    LifelineViewModel.prototype.Init = function () {
        var boundUpdateData = bind(this.updateData, this);
        dataRepository.GetLifelines(boundUpdateData);
    }
    
    var bind = function (func, thisValue) {
        return function () {
            return func.apply(thisValue, arguments);
        }
    }
    

1 个答案:

答案 0 :(得分:0)

由于selectedLifeline是一个可观察的,因此您没有正确设置其值。

你能尝试一下吗?而不是:

this.selectValue = function (data) { 
    this.selectedLifeline = ko.utils.arrayFirst(this.lifelines, function (lifeline) { 
        return lifeline.Name === data.Name; 
    }); 
} 

...类似......

this.selectValue = function (data) { 
    this.selectedLifeline(ko.utils.arrayFirst(this.lifelines, function (lifeline) { 
        return lifeline.Name === data.Name; 
    })); 
}