代码
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());
问题:正确设置allData
和mappedProducts
时(只是一系列带有名称和其他字段的产品),行console.log(self.products);
正在打印一个空数组。
我真的很困惑,我最初接近KO,但这似乎是教程中的相同代码......我只是使用产品而不是任务。我确定我错过了一些愚蠢的东西。
答案 0 :(得分:2)
您应该将事物记录在 observable中而不是observable本身:
console.log(self.products());
请参阅this fiddle,了解包含代码的演示。
在问题的情况下,它取决于浏览器将记录什么。当然, 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那样令人困惑。
答案 1 :(得分:1)
这用于设置observable:
self.products(mappedProducts)
这是为了获得一个observbale或一个计算
的值var mappedProducts = self.products();
注意括号。
我希望它有所帮助。