1

この問題を抱えている人をたくさん見てきましたが、何らかの理由でうまくいく解決策を見つけることができません。

次のエラーが表示されます。

Uncaught Error: cannot call methods on listview prior to initialization; attempted to call method 'refresh' 

これが何が起こっているかの内訳です。

私はこのイベントをバインドしています:

$('#person').bind('pagebeforeshow', function(e, data){
    Person.getPersonData();
});

getPersonData() メソッドでは、アンダースコア _.after 関数を使用してテンプレートをレンダリングし、すべての ajax 呼び出しが行われた後に 3 つのリストビューを更新しています。Knockout.js を使用して、いくつかのデータ バインディングを適用しています。

var tmplMarkup = $('#tmpl-person').html();
var compiledTmpl = _.template( tmplMarkup, {data: Person.data} );
$('#person-wrapper').html(compiledTmpl);
$('#person-info-wrapper').listview('refresh');
$('#person-related-wrapper').listview('refresh');
$('#person-groups-wrapper').listview('refresh');
$('#person-notes-wrapper').listview('refresh');
ko.applyBindings(Person.data, document.getElementById('person-notes-form'));

ここで何が間違っているのかわかりません。さまざまなページ読み込みイベントにバインドしようとしましたが、うまくいきませんでした。ajax呼び出しが行われた数秒後にsetTimeOutを使用してリストビューを更新しようとしましたが、それも役に立ちませんでした。

前もって感謝します。

4

2 に答える 2

1

この問題は簡単に解決できます。

これを使って:

$('#listview-id').listview().listview('refresh');

#listview-idリストビューID(またはその他の参照)はどこにありますか。最初にリストビューIDlistview()を初期化し、2番目のIDで更新します。

この問題についてもっと知りたい場合は、この記事で見つけることができます。正直なところ、それは私の個人的なブログ記事です。または、ここで見つけてください「マークアップ拡張の問題」という章を探してください。

于 2013-03-01T20:52:24.020 に答える
1

以下のようにしてみてください

$('#person-info-wrapper ul').listview();
$('#person-related-wrapper ul').listview();
$('#person-groups-wrapper ul').listview();
$('#person-notes-wrapper ul').listview();
于 2013-03-01T20:54:07.167 に答える