4

我在我的项目中使用了 knockout-2.1.0、jquery.mobile-1.2.0-rc.2。在提交这篇文章Knockout 和 jQuery Mobile: Binding data to select lists之前,我已经阅读了这个链接

我的问题是选择列表并不总是显示值。填充代码是正确的,它总是附加选择列表,当我激发元素时,我找到了数据,但 JQM 不显示。

我创建了 bindingHandlers 来触发

$(element).selectmenu('refresh', true);

但我发现这个解决方案不稳定,在我的浏览器上有时可以正常工作,有时不能。在我的 iPad2 上它不起作用。

这是我的代码:

ko.bindingHandlers.jqmOptions = {

    init: function (element, valueAccessor, allBindingsAccessor, viewModel) {

        if (typeof ko.bindingHandlers.options.init !== 'undefined')
            ko.bindingHandlers.options.init(element, valueAccessor, allBindingsAccessor, viewModel);

    },
    update: function (element, valueAccessor, allBindingsAccessor, context) {
        if (typeof ko.bindingHandlers.options.update !== 'undefined') {
            ko.bindingHandlers.options.update(element, valueAccessor, allBindingsAccessor, viewModel);
        }
        var instance = $.data(element, 'selectmenu');
        if (instance) {
            $(element).selectmenu('refresh', true);
        } 
    }
};

这个问题有没有稳定的解决方案。谢谢。

4

1 回答 1

0

来自 JQueryDocs:

更新布局

此事件由框架内动态显示/隐藏内容的组件触发,并作为一种通用机制来通知其他组件它们可能需要更新其大小或位置。在框架内,该事件在其内容被显示/隐藏的组件元素上触发,并一直冒泡到文档元素。

$( '#foo' ).hide().trigger( 'updatelayout' );
于 2012-10-16T18:45:15.897 回答