2015-03-31 18 views
1

用JavaScript代碼加載ko組件的最佳方式是什麼,而不是在html中定義自定義元素?我試着用ko.components.defaultLoader.load,但我的組件構造函數沒有命中。 我再次檢查,組件似乎已註冊。使用javascript加載knockoutjs組件

+0

'

Tyblitz 2015-03-31 19:09:28

回答

0

我相信你要找的是函數ko.components.get(componentName,callback)。這種方法所要做的就是要求組件裝載器解析組件名稱,直到找到它。如果沒有找到,它會調用回調函數(null)。如果它沒有問題,它會調用callback(componentDefinition),其中componentDefinition是用於註冊組件的對象,如{viewmodel:...,template:...}。

據我所知,沒有一個現成的函數返回一個「工作」組件。你獲得componentDefinition對象之後做的是一樣的東西:

  1. 轉換模板到DOM元素
  2. 實例化視圖模型(如果定義)
  3. 綁定的視圖模型DOM元素

請注意,這不是直接的,因爲可以通過多種方式定義模板和視圖模型。 我建議看看https://github.com/knockout/knockout/blob/master/src/components/componentBinding.js,看看它是如何完成的(從第38行開始)。

我希望這適用於您,否則您可以考慮其他選項,例如在組件綁定的代碼中動態創建div元素,其中組件的名稱和參數綁定到視圖模型的屬性。然後將此視圖模型綁定到剛剛創建的div元素。這應該工作「代碼只」代碼比其他路線少得多。