2
我爲自己的應用程序使用了我自己的簡單模板系統,並且每頁都將加載未知數量的「相同」模板。使用動態名稱創建KnockoutJS可觀察項目
所以基本上,我通過ajax調用獲取一些數據並獲得uniqueId。然後,我將模板加載到我的頁面中,並使用uniqueId應用ids和data-bind =「with:」。
<div id="content-uniqueId">
<div data-bind="with: uniqueId">
...
</div>
</div>
然後我調用一個函數,並試圖使用uniqueId創建一個observableArray,以便它綁定到我的'with'。
喜歡的東西:
function(uniqueId) {
var theObservable = uniqueId;
theObservable = ko.observableArray(); // make the observable name equal to uniqueId
// get some data
theObservable(new data);
}
我創建了一個JS小提琴,以幫助明確的事情了,但它不會工作,因爲我沒有收到阿賈克斯數據或者通過一個唯一的ID。
編輯:
Updated JS Fiddle,每下面Tyrsius'建議。
this[uniqueId] = ko.observableArray(new entityApp.dataContext.EntityModel(data));
絕對一步接近,但我得到了一個錯誤:
傳遞的參數初始化數組觀察到時,必須是一個數組,或者爲null或undefined
但'新的entityApp.dataContext.EntityModel(data)'返回一個對象數組,所以它應該沒問題。
謝謝,我現在更近了一步。但是我仍然收到錯誤信息(請參閱上面的編輯)。更新你的JS小提琴,使它更貼近我的情況。我不明白爲什麼它不起作用,但我可能仍然在做一些愚蠢的事情。 http://jsfiddle.net/FHz4k/3/ – dmathisen
你的問題是'theArray'是一個對象,而不是一個數組。你想要'theArray.names',或者'ko.observableArray([theArray])'? – Tyrsius
嗯。我不知道。當我不使用這些動態uniqueIds時,使用該數據可以很好地執行var obs = ko.observableArray();然後obs(new entityApp.dataContext.EntityModel(data));我不知道。我很感激幫助。我可能不得不重新考慮我的方法。 – dmathisen