【问题标题】:Knockout - Can't figure out why the dependencies aren't being updated淘汰赛 - 无法弄清楚为什么没有更新依赖项
【发布时间】:2013-01-11 16:08:19
【问题描述】:

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

简而言之,我有一个 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 = info; 更新 self.items 值。

【问题讨论】:

  • 你确定你的 AJAX 调用成功并且回调触发了吗?
  • 是的 100%,我只是简单地用 console.infoing 'jamie' 进行了测试 :(

标签: jquery ajax knockout.js


【解决方案1】:

您的回调替换 observable 数组并且没有正确设置它。需要调用对象传入的 observable 进行设置。

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

【讨论】:

    【解决方案2】:

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

    你想做的是:

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

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

    【讨论】:

    • 也非常感谢,正如预期的那样,这不会覆盖已经添加的数据,而是追加到数组中。
    猜你喜欢
    • 2014-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-06
    • 2017-05-11
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    相关资源
    最近更新 更多