2

我正在尝试加载我的 JSON 文件,然后为每个项目插入一个。

所以我有这个代码

function ProductType(id, name) {
var self = this;

self.id = id;
self.name = name;
}


function ProductsViewModel() {
    var self = this;
    var jqxhr = $.getJSON("data/product.json").success(function(data, status, xhr) { 
          self.products = ko.observableArray([    
      $.each(data.data.productTypeList, function(i,item){
          new ProductType(i, item.longName);
    })
]);               
      })
     .error(function() { alert("error"); })
     .complete(function() {
        console.log("fetch complete + " + this);
     });

}

我想知道如何从每个函数插入可观察数组的最佳实践

目前我收到此错误

错误:500 错误获取 /knockoutJQMProducts/#products 无法解析绑定。消息:ReferenceError:产品未定义;绑定值:foreach:产品

但如果我在每个语句中使用 console.log(i),它会返回结果。

谢谢

4

2 回答 2

3

ryadavilli 的答案很好,但可以通过缓存数组然后一次性设置 observableArray 来改进。

function ProductsViewModel() {
    var self = this;
    self.products = ko.observableArray();
    var jqxhr = $.getJSON("data/product.json").success(function(data, status, xhr) {
        var products = [];
        $.each(data.data.productTypeList, function(i, item) {
            products.push(new ProductType(i, item.longName));
        });
        self.products(products);
    })
        .error(function() {
            alert("error");
        })
        .complete(function() {
            console.log("fetch complete + " + this);
        });
}
于 2012-11-21T17:54:12.260 回答
2

我已经修改了您的 VM 和成功方法,以便在成功时填充可观察数组。但它一直存在。

function ProductsViewModel() {
    var self = this;
    self.products = ko.observableArray();    
    var jqxhr = $.getJSON("data/product.json").success(function(data, status, xhr) { 
      // use this remove all only if you want to clear and load with new data.
       self.products.removeAll();
       $.each(data.data.productTypeList, function(i,item){
          self.products.push(new ProductType(i, item.longName));
     })
  })
 .error(function() { alert("error"); })
 .complete(function() {
    console.log("fetch complete + " + this);
 });
}
于 2012-11-20T06:43:58.963 回答