#knockout.js
#knockout.js
Вопрос:
Я унаследовал проект с использованием нокаута ^3.1.0
. Мне нужно создать некоторые функции. Я никогда не использовал нокаут.
У каждого представления есть модель представления, которая вызывается из основной модели представления с 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 Неперехваченная ошибка ссылки: невозможно обработать привязку «foreach: function (){return { data:columnGenerator,как:’index’} }» Сообщение: генератор столбцов не определен
Я искал МНОГО вопросов, связанных с этой ошибкой, и ни один из них не помог.
Спасибо!
Комментарии:
1. Опубликовать полное сообщение об ошибке
2. готово (необходимо ввести 11 символов, чтобы опубликовать комментарий)
3. Вероятно, потому
<!-- ko foreach: { data: columnGenerator, as: 'index' } -->
, что находится в другой области , чем$root
. Попробуйте{ data: $root.columnGenerator, as: 'index' }
или включите полную соответствующую часть HTML.4. Да, так что я пробовал это несколько раз ранее и получил еще одну ошибку. Я просто сделал это, чтобы опубликовать ошибку, и все заработало. Так странно. Возможно, это было что-то еще, что я исправил. Отправьте это как ответ, и я приму его. Спасибо
Ответ №1:
Это потому, что ваш
<!-- ko foreach: { data: columnGenerator, as: 'index' } -->
Интерпретируется в области, отличной от $root
области (где columnGenerator
определено).
Попробуйте это вместо:
<!-- ko foreach: { data: $root.columnGenerator, as: 'index' } -->
См. Раздел Привязка-Контекст
Комментарии:
1. Я думаю, мой единственный вопрос: «Почему другие привязки работают без
$root.
префикса?»2. @MayNotBe, потому что, если вы не меняете область, ваша область — это
$root
область. Если вы добавите больше своего HTML-кода, мы сможем увидеть, почему / когда ваша область меняется (возможно, из-заwith
илиforeach
).3. Да, это имеет смысл. Спасибо!
4. Просто понял, что причина, по которой он не работал, заключалась в том, что я не очищал кеш браузера. SMH