【问题标题】:multiple server calls with knockout js带有淘汰赛js的多个服务器调用
【发布时间】:2014-07-09 21:58:28
【问题描述】:

我正在学习 Knockout,我想对不同的 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 

亲切的问候

詹姆斯

【问题讨论】:

    标签: jquery data-binding knockout-3.0


    【解决方案1】:

    您没有在同一个 DOM 元素上多次使用 applyBinding 是正确的。如果你这样做,它会抛出一个异常。

    至于您遇到的“无法处理绑定..”错误,查看错误消息,它告诉您正在将 data2(它是一个对象)视为一个函数。 原因是 data2 是 $.getJSON 函数的返回值,它是一个对象。如果你不将它定义为可观察的,它也是不可观察的。

    所以尝试将 () 放在:&lt;h2 data-bind="text: data2().user, valueUpdate: 'afterkeydown'"&gt;User&lt;/h2&gt;。改用这个:&lt;h2 data-bind="text: data2.user, valueUpdate: 'afterkeydown'"&gt;User&lt;/h2&gt;。 我希望这会有所帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-22
      • 2013-03-09
      • 1970-01-01
      • 1970-01-01
      • 2012-08-08
      • 2021-04-28
      • 2012-10-03
      • 1970-01-01
      相关资源
      最近更新 更多