0

入力要素を使用しない場合は問題ありませんが、「foreach」内で入力要素を使用すると、レンダリングが悪くなります (リストが表示されず、壊れた HTML 要素が表示されます)。アンドロイド2.

終了ボディタグの前にスクリプトでビューモデルを初期化しています:

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

私はjQuery Mobileでも作業しているので、試してみました

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

$("input").checkboxradio();

});

しかし、私はAndroid 2でも動作しませんでした.

Android 2でノックアウト.jsを使用してチェックボックス/ラジオボタン/ドロップダウンを正しくレンダリングする方法はありますか?

4

1 に答える 1

1

これが私がそれを機能させることができた方法です。jQuery Mobile 要素をレンダリングするには、KO の afterRender 属性を使用する必要があります。例えば:

<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 に答える