2015-03-31 2 views
1

Каков наилучший способ загрузки компонента ko с кодом JavaScript вместо определения пользовательского элемента в html? Я попытался с ko.components.defaultLoader.load, но мой конструктор компонентов не попал. Я проверял дважды, и компонент, похоже, зарегистрирован.Загрузить компонент knockoutjs с помощью javascript

+0

ответ

0

Я верю, что вы ищете функцию ko.components.get (имя компонента, обратный вызов). То, что делает этот метод, - попросить загрузчики компонентов разрешить имя компонента до его обнаружения. Если он не находит его, он вызывает callback (null). Если это будет хорошо, он вызовет callback (componentDefinition), где componentDefinition - это объект, используемый для регистрации компонента, например {viewmodel: ..., template: ...}.

Насколько я могу судить, не существует готовой функции, которая возвращает «рабочий» компонент. То, что вы должны сделать после получения объекта componentDefinition что-то вроде:

  1. преобразовать шаблон в элемент DOM
  2. создания экземпляра ViewModel (если они определены)
  3. свяжи ViewModel к DOM элементу

Обратите внимание, что это не сразу, потому что шаблоны и модели просмотра могут быть определены несколькими способами. Я рекомендую посмотреть на https://github.com/knockout/knockout/blob/master/src/components/componentBinding.js и посмотреть, как это делается здесь (из строки 38).

Я надеюсь, что это сработает для вас, иначе вы могли бы рассмотреть другие варианты, такие как динамическое создание элемента div в коде с привязкой к компоненту, где имя и параметры компонента привязаны к свойствам модели представления. Затем привяжите эту модель представления к только что созданному элементу div. Это должно работать только «код», который гораздо меньше кода, чем другой.

Смежные вопросы