Я использую свою собственную систему простого шаблонирования для своего приложения и загружаю неизвестное количество «одинаковых» шаблонов на страницу.Создание нокаута JS с динамическим именем
Так что, в основном, я получаю данные через вызов ajax и получаю uniqueId. Затем я загружаю шаблон в свою страницу и применяю идентификаторы и data-bind = "with:", используя uniqueId.
<div id="content-uniqueId">
<div data-bind="with: uniqueId">
...
</div>
</div>
Тогда я вызываю функцию, и я пытаюсь создать observableArray с помощью UniqueID, так что он связывается с моим «с».
Что-то вроде:
function(uniqueId) {
var theObservable = uniqueId;
theObservable = ko.observableArray(); // make the observable name equal to uniqueId
// get some data
theObservable(new data);
}
Я создал JS скрипку, чтобы помочь очистить вещи, но это не будет работать, потому что я не получаю АЯКС данные или передавая уникальный идентификатор.
EDIT:
Updated JS Fiddle, согласно предложению Tyrsius' ниже.
this[uniqueId] = ko.observableArray(new entityApp.dataContext.EntityModel(data));
Определенно один шаг близко, но я получаю сообщение об ошибке:
аргумент, передаваемый при инициализации наблюдаемый массив должен быть массив, или нуль, или неопределенными
Но ' new entityApp.dataContext.EntityModel (data) 'возвращает массив объектов, поэтому все должно быть хорошо.
Спасибо, я сейчас на шаг ближе. Но у меня все еще появляется ошибка (см. Мое редактирование выше). Обновил ваш скрипт JS, чтобы он более точно соответствовал моей ситуации. Я не понимаю, почему он не работает, но я, вероятно, все еще делаю что-то глупое. http://jsfiddle.net/FHz4k/3/ – dmathisen
Ваша проблема в том, что 'theArray' является объектом, а не массивом. Вам нужны 'theArray.names' или, возможно,' ko.observableArray ([theArray]) '? – Tyrsius
Хммм. Я не знаю. Когда я не использовал эти динамические уникальные идентификаторы, использование этих данных отлично работало с var obs = ko.observableArray(); затем obs (new entityApp.dataContext.EntityModel (данные)); Я не знаю. Я ценю помощь. Возможно, мне придется пересмотреть мой подход. – dmathisen