0

Code

function Product(name) {
  this.name = ko.observable(name);
}

function ProductViewModel() {
  var self = this;
  self.products = ko.observableArray();
  $.getJSON("/admin/test", function(allData) {
    var mappedProducts = $.map(allData, function(item) { return new Product(item.name) });
    self.products(mappedProducts);
    console.log(self.products);
  });    
}

ko.applyBindings(new ProductViewModel());

Problem: while allData and mappedProducts are properly set (just an array of products with name and some other field), the line console.log(self.products); is printing an empty array.

I am really confused, i am at first approach with KO but this seems the very same code from the tutorials... im just using products instead of tasks. I'm sure i'm missing something silly.

4

2 回答 2

2

您应该记录可观察对象而不是可观察对象本身的内容

console.log(self.products());

请参阅此小提琴以获取包含您的代码的演示。

在问题的情况下,它取决于浏览器将记录什么。当然,Chrome有点令人困惑:

[]

看起来像一个空数组。Internet Explorer 10更有意义,输出:

function c(){if(0<arguments.length)return c.equalityComparer&&c.equalityComparer(d,arguments[0])||(c.K(),d=arguments[0],c.J()),this;a.q.bb(c);return d}

那就是:事实上self.products是一个函数(一个可观察的)。Firefox介于两者之间,输出:

c()

不如 IE10 有用,但也不像 Chrome 那样令人困惑。

于 2013-10-16T22:05:24.410 回答
1

这是为了设置 observable :

self.products(mappedProducts)

这是为了获取 observbale 或计算的值

var mappedProducts = self.products();

注意括号。

我希望它有所帮助。

于 2013-10-16T21:57:56.730 回答