Knockout值未在功能中设置

时间:2014-02-10 16:42:00

标签: c# javascript knockout.js knockout-mvc

我在尝试使用self.material(一个可观察的)从函数中加载值时遇到问题。当尝试使用值加载select中的observable时,它显示为undefined。 data.materialNumber有一个字符串值,self.materials正确加载。任何帮助将不胜感激!

我会尝试只包含所需的代码......

我的HTML:

<select class="materialSelect" data-placeholder="Choose Material..." 
                                data-bind="options: materials,
                            value: material,
                            optionsText: function (item) { return item.description }, 
                            optionsValue: function (item) { return item.materialNumber },
                            chosen: materials,
                            chosenOptions: { width: '250px', search_contains: true }"></select>

我的js:

function Mrs() {

var self = this;


self.materials = ko.observableArray();
self.material = ko.observable("");


bom.hubs.mrs.server()
    .getMaterialsForAuthorizedPlants(lastSection)
    .done(function (data) {
        data.materials.unshift({});
        self.material(data.materialNumber);
        self.materials(data.materials);
    });
 };
(function (bom) {
    "use strict";

    bom.hubs.done(function() {
        ko.applyBindings(new Mrs());
    });

})(bom);

1 个答案:

答案 0 :(得分:0)

TL; DR在self.material

之前分配self.materials

选项绑定将尝试将所选选项与值同步,但是当您指定self.material时没有选项,因此它会将材质值重置为undefined。

当你设置self.materials时,选项会重建,但self.material现在是未定义的。

如果交换分配,则在设置了材料可观察量时,选择选项将可用。