0

私はノックアウトを学んでおり、異なる URL に対して複数のサーバー呼び出しを行いたいと考えています。Knockout についてはよくわかりませんが、applyBinding を複数回使用することはできず、使用すべきではないことはわかっているので、次のようにします。

<h2 data-bind="text: data2().user, valueUpdate: 'afterkeydown'">User</h2>
<h2 data-bind="text: data2().id">ID</h2>
<input type="text" data-bind="value: user, valueUpdate: 'afterkeydown'"               placeholder="text goes here" />

<div data-bind="foreach: data1()">
    <div data-bind="text: name"></div>
    <div data-bind="text: count"></div>
</div>


<script src="~/Scripts/knockout-3.1.0.js"></script>
    <script>
        var viewModel = function () {
            var self = this;
            self.data1 = $.getJSON('http://localhost:57635/api/Stats/GetAllStats', function (data) {
                name: data.Name;
                count: data.Count
            });
            self.data2 = $.getJSON('http://localhost:57635/api/Stats/GetItem', function        (data) {
                user: ko.observable(data.ItemName);
                id: data.Id
            });
        };
        ko.applyBindings(viewModel)         
    </script>

誰かが正しい方向への一歩や修正を与えることができれば、非常に感謝しています.

受け取ったコンソールのエラーは次のとおりです。

Uncaught TypeError: Unable to process binding "text: function (){return data2().user }"
Message: object is not a function 

敬具

ジェームズ

4

1 に答える 1

0

同じDOM要素でapplyBindingを複数回使用しないことについては正しいです。これを行うと、例外がスローされます。

「バインディングを処理できません..」というエラーについては、エラーメッセージを見ると、オブジェクトである data2 を関数として扱っていることがわかります。これは、data2 がオブジェクトである $.getJSON 関数の戻り値であるためです。また、オブザーバブルとして定義しないとオブザーバブルではありません。

() を にドロップしてみてください<h2 data-bind="text: data2().user, valueUpdate: 'afterkeydown'">User</h2>。代わりにこれを使用してください: <h2 data-bind="text: data2.user, valueUpdate: 'afterkeydown'">User</h2>. これが役立つことを願っています

于 2014-08-08T19:09:48.810 に答える