0

请原谅我无法上传任何东西来摆弄。

简而言之,我有一个 json 数组,我想从中读取和循环,当我开始 ko 时,我已经包含了旁边的数组。这很有效,当我尝试使用 ajax 加载一些 json 时,它就失败了。

我有这个对象

   hutber.portfolio.ko = {
    init: function(){
        ko.applyBindings(new hutber.portfolio.ko.portfolioViewModel());
    },
    items: [],
    portfolioViewModel: function(){
        var self = this;

        var data = [
            {   "title":"poo"
            }
        ];

        self.items = ko.observableArray(data);

        var jamie = $.getJSON('/js/pages/portfolio.json').done(function(info){
            self.items = info;
        });
    }
};
hutber.portfolio.init();

投资组合.json

[
{   "title":"willies"
}
]

标记

        <ul data-bind="foreach: items">
            <li data-bind="text: title">
                 <h4>Volkswagen.co.uk</h4>
            </li>
        </ul>

在我看来,这应该可以完美运行。一旦我的 ajax 请求完成,我就会更新self.items值。self.items = info;

4

2 回答 2

3

您的回调正在替换可观察数组并且未正确设置它。您需要调用传入对象的可观察对象来设置它。

    var jamie = $.getJSON('/js/pages/portfolio.json').done(function(info){
        self.items(info); // set the items to the info array
    });
于 2013-01-11T00:06:18.167 回答
1

问题是您正在重新分配集合的值self.items而不是更新集合。

你想做的是:

var jamie = $.getJSON('/js/pages/portfolio.json').done(function(info){
    info.forEach(function (x) { self.items.push(x); });
});

我假设它info是一个数组,如果不直接推送它的话。

于 2013-01-11T00:07:17.697 回答