0

我正在使用 knockout.js 显示列表值,当我不使用输入元素时它很好,但是当我在“foreach”中使用输入元素时,它呈现错误(它不显示列表并显示损坏的 HTML 元素)安卓 2。

我在结束正文标记之前的脚本中初始化视图模型:

$(".pageId").bind('pageinit', function(){
ko.applyBindings(new MyViewModel());
}); 

我也在使用 jQuery Mobile,所以我尝试了

$(".pageId").bind('pageshow',function(){ 

$("input").checkboxradio();

});

但我也没有在 Android 2 上工作。

有没有办法在 Android 2 上使用 knockout.js 使复选框/单选按钮/dropdows 正确呈现?

4

1 回答 1

1

这就是我如何让它工作的方法。您必须使用 KO 的 afterRender 属性来渲染 jQuery Mobile 元素。例如:

<script type="text/javascript">
    function jQueryify(elements, dataObj)
    {
        $.each(elements, function(key, obj)
        {
            if($(this).is('input[type="radio"]'))
                $(obj).checkboxradio();
            else if($(this).is('select'))
                $(obj).selectmenu();
        });
    }
</script>

然后在标记中

<div data-bind="foreach: {data: collection, afterRender: jQueryify}>
    <!-- Your template goes here -->
</div>

我确信有更好的方法可以做到这一点,但我就是这样做的。我知道您也可以使用 jQuery Mobile 公开的“创建”事件,但我还没有研究过。

编辑:我刚刚在我正在寻找的 jQuery Mobile 网站上找到了文档:http: //jquerymobile.com/demos/1.1.1/docs/pages/page-scripting.html
如果您查看“增强新标记” " 部分,您将看到他们对如何呈现内容以使其看起来正确的建议。此外,绑定到 'pageinit' 事件意味着任何需要创建的东西都已经变成了 jquery 移动小部件版本。如果您想在 jquery 获取内容之前绑定到内容(从而使新内容与其余内容一起呈现),您可以绑定到常规 $(document).ready() 函数。

于 2012-09-06T21:24:14.390 回答