2016-10-13 10 views
3

ノックアウト^3.1.0を使用してプロジェクトを継承しました。私はいくつかの機能を構築する必要があります。私は決してノックアウトを使用していない。ノックアウトがバインディングを処理できません - 定義されていません

各ビューには、メインビューモデルから呼び出されたビューモデルがinit(model)であります。

プロパティは、initの先頭で初期化され、問題なくビューで使用されます。例えば:

<!-- ko if: hasEntities --> 
<!-- ko foreach: { data: entities, as: 'entity' } --> 

は、だから私は私の新しいプロパティを初期化し、同じ場所/方法:

model.numberOfColumns = ko.observable(2); 

    model.columnGenerator = ko.computed(function() { 
    return ko.utils.range(0, model.numberOfColumns()); 
    }, model); 

model.entities = ko.observableArray([]); 
model.hasEntities = ko.observable(false); 

は次のように結合無容器でエラーなしなどのように初期化され、使用されます

として使用してください:

<!-- ko foreach: { data: columnGenerator, as: 'index' } --> 

と、このエラーを取得するには:

knockout.js:72 Uncaught ReferenceError: Unable to process binding "foreach: function(){return { data:columnGenerator,as:'index'} }" Message: columnGenerator is not defined

は、私は、このエラーに関連する多くの質問を検索したと誰も助けませんでした。

ありがとうございます!あなたの

<!-- ko foreach: { data: columnGenerator, as: 'index' } --> 

は(columnGeneratorが定義されている)$rootスコープとは異なる範囲に解釈されるためです

+1

ポスト – haim770

+0

済完全なエラー・メッセージを参照してください - KOのforeachのを:!{データ: 'index'} - > 'は' $ root'とは異なるスコープ*内にあります。 '{data:$ root.columnGenerator、as: 'index'}'を試してください。あるいは、関連するHTMLの部分を完全に記述してください。 – MayNotBe

+0

おそらく '<理由(コメントを投稿するには11文字を入力する必要があります) – haim770

答えて

2

代わりにこれを試してみてください:

<!-- ko foreach: { data: $root.columnGenerator, as: 'index' } --> 

Binding-Context

+0

私の唯一の疑問は、なぜ '$ root.'プレフィックスなしで他のバインディングが動作しているのでしょうか? ' – MayNotBe

+0

@MayNotBe、スコープを変更しない限り、スコープは '$ root'スコープです。あなたのHTMLをより多く含めるならば、なぜあなたのスコープが変わっているのかを見ることができます(おそらく、 'with'や' foreach'のせいで)。 – haim770

+0

はい、意味があります。ありがとう! – MayNotBe

関連する問題