2016-10-13 27 views
3

我使用淘汰賽繼承了一個項目^3.1.0。我需要建立一些功能。我從來沒有使用Knockout。淘汰賽無法處理綁定 - 未定義

每個視圖都有一個視圖模型,該視圖模型從主視圖模型調用init(model)

屬性在初始化時初始化,並在視圖中使用,沒有問題。例如:

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

在無容器被初始化本身和使用沒有錯誤這樣的結合:

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

並且使用它:

<!-- 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

我搜索有關這個錯誤的許多問題並沒有幫助。

謝謝!

+1

完成後完整的錯誤消息 – haim770

+0

(必須輸入11字符發表評論) – MayNotBe

+0

可能是因爲'< - KO的foreach:{數據: columnGenerator,如下所示:'index'} - >'與'$ root'不在同一個*範圍內。試試'{data:$ root.columnGenerator,如:'index'}'或者包含完整的相關HTML部分。 – haim770

回答

2

那是因爲你的

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

解釋不同範圍$root範圍(其中columnGenerator定義)。

試試這個:

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

Binding-Context

+0

我想我唯一的問題是'爲什麼其他綁定工作時沒有'$ root.'前綴?' – MayNotBe

+0

@MayNotBe,因爲除非你改變範圍,你的範圍是'$ root'範圍。如果你將包含更多的HTML,我們將能夠看到爲什麼/當你的範圍發生變化時(可能是由於''with'或'foreach')。 – haim770

+0

是的,這是有道理的。謝謝! – MayNotBe