gpt4 book ai didi

knockout.js - Knockout JS Ajax 调用不填充可观察数组

转载 作者:行者123 更新时间:2023-12-04 20:07:21 25 4
gpt4 key购买 nike

下面的示例显示了一个用 Json 填充的可观察数组,然后您可以根据“类型”将结果过滤到 2 个列表中。

这一切工作正常,直到我尝试从 ajax 调用加载完全相同的 Json!

奇怪的是,如果我在脚本中放置一个警报,它就可以正常工作...

http://jsfiddle.net/spdKE/3/

<h2>Brand</h2>
<ul id="list-dimensions" data-bind="foreach: filteredDimensions('BRAND')">
<li>
<div class="item">ID</div> <span data-bind="text: $data.id"</span>
</li>
</ul>
<h2>Area</h2>
<ul id="list-dimensions" data-bind="foreach: filteredDimensions('AREA')">
<li>
<div class="item">ID</div> <span data-bind="text: $data.id"</span>
</li>
</ul>​

function ProductDimensionsViewModel () {
var self = this;
self.dimensions = ko.observableArray();

var baseUri = 'api/product_dimensions.php';


/*$.getJSON(baseUri, function(data){
success: self.dimensions = data;
});*/

$.ajax({
type: 'GET',
url: baseUri,
data: {},
context: this,
success: function(data) {
self.dimensions = data
},
dataType: 'json'
});


self.filteredDimensions = function(type) {
return $.map(self.dimensions, function(dimension) {
if (dimension.type == type) {
return dimension;
}
});
}

}





ko.applyBindings(new ProductDimensionsViewModel());

最佳答案

您正在替换变量,而不是更新它:

...
success: function(data) {
self.dimensions = data
},
...

Observables 以这种方式更新:

...
success: function(data) {
self.dimensions(data)
},
...

我不会使用 filteredDimensions('AREA') 因为它会在您的页面呈现后立即调用。使用可观察对象,将值存储在变量 currentFilter 中,然后通过模板加载正确的 View 。此外,如果您只有两个过滤器,更好的方法是使用两个方法:filterByAreafilterByBrand

编辑:添加示例:http://jsfiddle.net/jjperezaguinaga/spdKE/4/

关于knockout.js - Knockout JS Ajax 调用不填充可观察数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14163763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com