0

すべての変数が実行前に JavaScript の「先頭」に移動され、そこから処理されると確信しているため、これには少し混乱しています。

だから私のエラー

 TypeError: hutber.portfolio.ko is undefined
 [Break On This Error]  
 items: ko.observableArray(hutber.portfolio.ko.data),

物体

(function ($) {
"use strict"; //For good development standards :)
hutber.portfolio = {
    init: function(){
        e(typeof(hutber));
        hutber.portfolio.changeOptionsBoxHeight();
        //Bind the height resize in window resize
        $(window).resize(function(){
            hutber.portfolio.changeOptionsBoxHeight();
        });
        //start KO
        hutber.portfolio.ko.init();
    },
    changeOptionsBoxHeight: function(){
        var height = $(window).height();
        $('.portfolio--options').height(height-400);
    }
};
hutber.portfolio.ko = {
    init: function(){
        ko.applyBindings(new hutber.portfolio.ko.portfolioViewModel());
    },
    data: [],
    items: ko.observableArray(hutber.portfolio.ko.data),
    portfolioViewModel: function(){

        hutber.portfolio.ko.items = ko.observableArray(hutber.portfolio.ko.data);

        $.getJSON('/js/pages/portfolio.json').done(function(info){
            hutber.portfolio.ko.data = info;
            hutber.portfolio.ko.items (hutber.portfolio.ko.data);
        });
    }
};
hutber.portfolio.init();
})(jQuery);

私は本当にこれをフィドルにアップロードしたかったのですが、何らかの理由で、サイトで js エラーが発生しています。ファイアウォールが特定のファイルの読み込みをブロックしていると思います。

4

2 に答える 2

1

ko.observableArray(hutber.portfolio.ko.data)実行される時点では、hutber.portfolio.koまだ定義されていません。

次のように回避できます。

hutber.portfolio.ko = {
    init: function(){
        ko.applyBindings(new hutber.portfolio.ko.portfolioViewModel());
    },
    data: [],
    portfolioViewModel: function(){

        hutber.portfolio.ko.items = ko.observableArray(hutber.portfolio.ko.data);

        $.getJSON('/js/pages/portfolio.json').done(function(info){
            hutber.portfolio.ko.data = info;
            hutber.portfolio.ko.items (hutber.portfolio.ko.data);
        });
    }
};

hutber.portfolio.ko.items = ko.observableArray(hutber.portfolio.ko.data);

しかし、この時点hutber.portfolio.ko.dataでは常に[]. したがってko.observableArray([])、元のコードを挿入することもできます。

于 2013-01-11T14:05:08.827 に答える
0

推測してください:変数を宣言する前に変数にアクセスしているためですか?

于 2013-01-11T13:59:33.777 に答える