knockout.js 为什么ko.ObservableArray中被替换的值没有更新我的视图?

k5ifujac  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(197)

我正在尝试为一个简单的网上商店制作一个概述页面。客户端可以转到下一页,但这不会重新加载整个文档,它只是触发了一个获取下一组产品的过程。我正在用knockout填充元素列表。网站加载了一个空的产品列表,并启动了一个初始获取过程。目前,这是用一个常量值完成的。但将来将取决于URL。
提取完成后ObservableArray的值会更新,但视图不会改变。如果我在提取后绑定视图模型,那么它会相应地更新视图,但我认为这不是首选方法。
我想问题出在我对图书馆惯例的理解上。我希望有人能给我讲得更清楚些。
我的代码如下:

  1. let OverviewModel = function() {
  2. let self = this;
  3. self.products = ko.observableArray([]);
  4. };
  5. let OverviewController = function(model) {
  6. let self = this;
  7. ko.applyBindings(model);
  8. console.log("Model is bound"); // Prints
  9. self.fetchProducts = function (amount, page) {
  10. let url = new URL("/webshop/products", window.location.href)
  11. url.searchParams.append("amount", amount)
  12. url.searchParams.append("page", page)
  13. $.getJSON(url, function (data) {
  14. console.log(model.products()); // Prints: []
  15. model.products.removeAll();
  16. ko.utils.arrayPushAll(model.products, data);
  17. model.products.valueHasMutated();
  18. console.log(model.products()) // Prints: [Object { title: Lorem, ... }, ...]
  19. });
  20. };
  21. };
  22. let model = new OverviewModel();
  23. let controller = new OverviewController(model);
  24. controller.fetchProducts(20, 0);
ccgok5k5

ccgok5k51#

我不太确定什么对你不起作用,看看这个代码片段,一切都如预期的那样工作。我已经删除了fetchProducts中的一些代码,因为这不是一个简单的淘汰更新应该做的事情。(还有一个小的虚假的数据检索api承诺)
第一个

相关问题