Knockout - 获取选择选项并选择其中一个

时间:2015-05-18 18:30:39

标签: javascript jquery knockout.js

当我加载页面时,我找到了repos/svn/db/min-unpacked-rev。我使用knockout data-bind来获取值

<select>

现在我正在使用<select data-bind="attr: { id: 'input-' + id(), required: !allowBlank }, options: valuesArray, optionsText: 'description', optionsValue: 'itemValue', optionsCaption: 'Select One...', value: value, enable: isEnabled, event: { focus: $parent.getOptions}" class="form-control" /> 事件,因为我似乎无法掌握行为类似于focus的事件...

我的问题是2:

  1. 如何尽快触发onReady?最好在用户互动之前......
  2. 属性$parent.getOptions总是有值,我该如何设置?我想我必须w8让value返回......或者我可以强迫&#34;它?!?是的,他们关键我计划强制将在上面提到的电话中使用。

1 个答案:

答案 0 :(得分:0)

您正尝试在给定事件中填充您的选择选项。在淘汰赛中,这是通过改变观察者的价值来实现的,淘汰赛会照顾其余部分。您可以将此事件绑定到一个函数,并将内部绑定到此函数,您可以调用$ parent.getOptions逻辑。这是一个例子

var exampleVM = function () {
    var self = this;
    self.valuesArray = ko.observableArray([]);
    self.value = ko.observable();

    self.getOptions = function () {
        var responseFromTheServer;
        //Make ajax calls in here to get the values and format those to
        //an array in the form [{ description: ..., itemValue: ... }]
        self.valuesArray(responseFromTheServer); 
// In here knockout will update the select in the html with your options
    };

    self.isEnable = ko.observable(true);
    // The rest of your viewmodel ....

}

别忘了调用apply bindings。然后html看起来像

<select data-bind="attr: { id: 'input-' + id(), required: !allowBlank },
                       options: valuesArray,
                       optionsText: 'description',
                       optionsValue: 'itemValue',
                       optionsCaption: 'Select One...',
                       value: value,
                       enable: isEnabled,
                       event: { focus:  getOptions}"
                class="form-control" />

调用$ parent仅在viewmodel内部或foreach绑定内部具有viewmodel时使用。在你的情况下,所有东西都在同一个viewmodel中,所以在调用$ parent时没有意义。 如果你想尽快触发它,你应该在你的viewmodel声明的末尾调用self.getOptions。

var exampleVm = function () {
    var self = this;
    ........
    //This will execute as soon the viewmodel is created. 
    //Remember getOptions is just a plain javascript function
    self.getOptions();
}

要设置一个值,首先需要填充选项,然后使用相关的observable进行设置。

self.value(myNewValue);

如果您在选择中没有任何选项,则Knockout将无效,因此您必须在设置值后首先填充选项。

<强> {编辑}

我忘了提及你是否从一开始就加载你的选项,你不再需要焦点事件了。删除此项或在焦点上再次触发对服务器的调用。