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();

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;

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 に答える