1

Durandal Startkit テンプレートには、実装された検索が含まれていません (それで問題ありません)。おそらくそれが持つべきものは、観察可能なプロパティとそれをバインドすることです。ここで、検索テキストをこのデモにバインドする方法をお見せしようとしましたが、間違った値 (古い値) を検索します。

ここにViewModel:Shell.js(箱から出して)

define(['plugins/router', 'durandal/app'], function (router, app) {
    return {
        router: router,
        search: function() {
            app.showMessage('Search not yet implemented...');
        },
        activate: function () {
            router.map([
                { route: '', title:'Welcome', moduleId: 'viewmodels/welcome', nav: true },
                { route: 'flickr', moduleId: 'viewmodels/flickr', nav: true }
            ]).buildNavigationModel();

            return router.activate();
        }
    };
});

監視可能なプロパティである searchText を追加し、その「値」を表示するように検索機能を変更しました。

searchText: ko.observable(),
search: function() {
    app.showMessage('Search not yet implemented... Searching for: ' + this.searchText() );
},

そして、それをビューにバインドしました:shell.html

<input type="text" class="search-query" placeholder="Search" data-bind="value: searchText">

何かが正しくありません。検索で表示される値は、現在の値ではなく古い値です。どうやら検索機能が最初に実行され、次にsearchTextの値が設定/更新されます。しかし、よくわかりません。

どうすればこの問題を解決できますか? (検索時に最新の値を使用するため)

4

1 に答える 1

1

検索メソッドは接続されていますが、バインディングを使用する場合data-bind="submit:search"、KO はデフォルトchangeで入力のイベントをリッスンします。value

ただし、Enter キーを押して検索フォームを送信すると、入力のchangeイベントがすぐに発生しないため、「古い」値が表示されます。

valueUpdate: 'afterkeydown'これは( docを参照)を使用して修正できるためsearchText、何かを入力するとすぐにKO が更新されます。

<input type="text" class="search-query" placeholder="Search" 
       data-bind="value: searchText, valueUpdate: 'afterkeydown'">
于 2013-08-22T19:04:25.900 に答える