2012-10-01 55 views
4

我在我的项目中使用了knockout-2.1.0,jquery.mobile-1.2.0-rc.2。 我在提交这篇文章前已阅读此链接Knockout and jQuery Mobile: Binding data to select listsKnockout和jQuery Mobile:绑定选择列表

我的问题是选择列表不总是显示值。填写代码是正确的,它总是附加选择列表,当我激发元素时,我找到了数据,但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); 
     } 
    } 
}; 

是否有该问题的任何稳定的解决方案。 谢谢。

+0

我看你读过[淘汰赛和jQuery移动:将数据绑定到选择列表(http://stackoverflow.com/questions/9373982/knockout-and-jquery-mobile-binding-data-to - 选择列表),但你有没有尝试这个解决方案:http://stackoverflow.com/a/9374054/932282? – mhu

+0

mhu,是的,我做到了。 – Ibsuser

回答

0

从JQueryDocs:

UpdateLayout请

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

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