Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 如何将knockout与webapi绑定_Jquery - Fatal编程技术网

Jquery 如何将knockout与webapi绑定

Jquery 如何将knockout与webapi绑定,jquery,Jquery,有人能告诉我以下两个RateCardViewModel函数之间的区别吗 $(document).ready(function () { ko.applyBindings(new RateCardsViewModel(1)); }); function RateCardsViewModel(projectId) { //This version binds as expected var self = this; self.rateCards = ko.observ

有人能告诉我以下两个RateCardViewModel函数之间的区别吗

$(document).ready(function () {  
    ko.applyBindings(new RateCardsViewModel(1));
});

function RateCardsViewModel(projectId) {  //This version binds as expected
    var self = this;
    self.rateCards = ko.observableArray();
    $.getJSON("/api/mydata/1", self.rateCards);
}

function RateCardsViewModel(projectId) {   //This version does not bind
    var self = this;
    self.rateCards = ko.observableArray();

    $.getJSON("/api/mydata/1", function (data) {
        self.rateCards = data;
    });
}

看起来第二个版本是在绑定之后获取数据的,但我认为两个版本的getJSON都是异步的。任何帮助都将不胜感激


我需要用第二种方法来实现这一点,因为我想使用映射插件,这两个版本都是异步获取数据的。不同之处在于,第一个版本将检索到的数据立即传递给可观察对象,而另一个版本提供了一个自定义函数,该函数反过来替换可观察对象

但是,不要忘记可观察对象实际上是一个函数,这意味着在设置可观察对象的值时,应使用
self.rateCards(newValue)
而不是
self.rateCards=newValue
。在后一种情况下,您实际上会替换可观察对象,而不是更新其值,这意味着对可观察对象的订阅不会知道更改,并且仍然会订阅现在未使用的可观察对象

因此,要替换顶级版本,您应该执行以下操作:

function RateCardsViewModel(projectId) {
    var self = this;
    self.rateCards = ko.observableArray();

    $.getJSON("/api/mydata/1", function (data) {
        self.rateCards(data);
    });
}

谢谢,罗伯特,这很有道理。