Knockout和jQuery Mobile:绑定选择列表

时间:2012-10-01 07:36:48

标签: jquery-mobile knockout.js

我在我的项目中使用了knockout-2.1.0,jquery.mobile-1.2.0-rc.2。 在提交此帖Knockout and 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);
        } 
    }
};

是否有针对该问题的稳定解决方案。 感谢。

1 个答案:

答案 0 :(得分:0)

来自JQueryDocs:

UpdateLayout请

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

$( '#foo' ).hide().trigger( 'updatelayout' );