淘汰赛 - 无法弄清楚为什么没有更新依赖项

时间:2013-01-10 23:28:01

标签: jquery ajax knockout.js

请原谅我无法上传任何内容。

简而言之,我有一个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();

portfolio.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;值。

2 个答案:

答案 0 :(得分:3)

您的回调是替换可观察数组并且没有正确设置它。你需要调用observable传入对象来设置它。

    var jamie = $.getJSON('/js/pages/portfolio.json').done(function(info){
        self.items(info); // set the items to the info array
    });

答案 1 :(得分:1)

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

您想要做的是:

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

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