0

ASP.NET MVC4 プロジェクトで Knockout.js を SignalR と組み合わせて使用​​し、産業施設をリアルタイムで視覚化しています。スパンまたはテキスト ボックスがビュー モデルにデータ バインドされているページが多数あります。2 ~ 10 秒ごとに新しい値が SignalR を介してサーバーからクライアントのブラウザーに送信され、ビュー モデル内の値 (したがって、スパン、div、またはテキスト ボックス入力内のテキスト) が更新されます。これは非常にうまく機能します。私が達成しようとしているのは、値が変更されるたびに、ページ上のある種の視覚的な通知です (たとえば、値を表示する DOM 要素を jQuery でハイライトします)。

ノックアウト.jsのイベントバインディングは私が必要としているものに近いと思いますが、私が見る限り、強調表示する必要があるDOM要素ではなく、関連するビューモデルアイテムのみをJS関数に渡すことができます. アイデアが伝わったと思います。

したがって、テキスト ボックス入力の値が手動ユーザー入力ではなく「コード ビハインド」から変更されたときに関数をトリガーする方法が必要です。この関数には、さらに処理するために関連する DOM 要素を指定する必要があります。

これまでの私のコード:

    <table class="StatusRowList">
        <thead>
            <tr>
                <th>Parameter</th>
                <th>Value</th>
            </tr>
        </thead>
        <tbody data-bind="foreach: Items">
            <tr>
                <td><a data-bind="attr: { href: '/Archive/Show/?StationId=' + StationId() + '&DataPointId=' + DpId() }"><span data-bind="text: Text"></span></a></td>
                <td>
                    <span data-bind="text: UnitPrefix"></span>
                    <input data-bind="value: Value" />
                    <span data-bind="text: UnitSuffix"></span>
                </td>
            </tr>
        </tbody>
    </table>

関心のある行は、2 つのスパン間の「入力」です。それについて助けてくれてありがとう!

4

1 に答える 1

0

Observable がバインディングから設定されたのか、ViewModel から設定されたのかを区別する方法はありません。これを次のように修正する ko エクステンダを作成する必要があります。

http://jsfiddle.net/a3fFa/

ko.extenders.eventDriven = function(target, options) {
    var computed = ko.computed({
        read: target,
        write: target
    });
    computed.updatedFromEvent = ko.observable(false);
    computed.onEvent = function(value) {
        target(value);
        computed.updatedFromEvent(true);
    }    

    return computed;
};

編集: 私はこのところでフレームワークを行いました https://github.com/AndersMalmgren/Knockout.Concurrency しかし、別のユーザーがいつ保存して競合をユーザーに提示するかを検出することをより目的としています http://jsfiddle.net/7atZT/ 1/

于 2013-06-04T09:13:14.480 に答える