当使用knockout`options`绑定时,如何将`data`属性值设置为`option`

时间:2016-09-22 20:56:15

标签: jquery knockout.js

在淘汰赛的documentation中,它提到optionsAfterRender。我试图添加data属性值而没有成功。

以下是doc中的示例:

<select size=3 data-bind="
    options: myItems,
    optionsText: 'name',
    optionsValue: 'id',
    optionsAfterRender: setOptionDisable">
</select>

<script type="text/javascript">
    var vm = {
        myItems: [
            { name: 'Item 1', id: 1, disable: ko.observable(false)},
            { name: 'Item 3', id: 3, disable: ko.observable(true)},
            { name: 'Item 4', id: 4, disable: ko.observable(false)}
        ],
        setOptionDisable: function(option, item) {
            ko.applyBindingsToNode(option, {disable: item.disable}, item);
        }
    };
    ko.applyBindings(vm);
</script>

这是我尝试但不起作用但也没有错误。

setOptionDisable: function(option, item) {
    $(option).text(''); // this will blank out the text in options
    $(option).data('test', '123'); // but this won't do anything at all.
    $(option).attr('data-test', '123'); // this worked as pointed out by Matt
}

1 个答案:

答案 0 :(得分:2)

jQuery实际上指定了CachedAssemblyCatalog但它没有显示在data attr元素上,因为jQuery将其保存在内部数据结构中。 如果您记录最近的数据attr,您将获得该值,但您不会在DOM上看到。

示例:https://jsfiddle.net/kyr6w2x3/83/

但是如果你使用DOM,它也会更新dom属性。

示例https://jsfiddle.net/kyr6w2x3/84/