4

私のプロジェクトでは、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);
        } 
    }
};

その問題に対する安定した解決策はありますか。ありがとう。

4

1 に答える 1

0

JQueryDocs から:

更新レイアウト

このイベントは、コンテンツを動的に表示/非表示にするフレームワーク内のコンポーネントによってトリガーされ、サイズまたは位置を更新する必要がある可能性があることを他のコンポーネントに通知するための一般的なメカニズムとして意図されています。フレームワーク内では、このイベントはコンテンツが表示/非表示にされたコンポーネント要素で発生し、ドキュメント要素までバブルします。

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