2016-03-15 22 views
1

我試圖用knockoutjs註冊多個組件,但是從同一個應用程序中的不同上下文中導致出現「錯誤:您無法多次將綁定應用於同一元素。Knockout.js在不同的上下文中註冊多個組件

我試圖做的是從多個地方調用這個。

knockout.components.register('a-name', { 
    viewModel: AViewModel, 
    template: { require: 'text!ui/views/a-view.html' } 
}); 

knockout.applyBindings(); 

如果我在一個地方註冊所有組件,並使applyBindings()一次,這將工作。但是這另一方面給我帶來了其他許多問題。正如我希望我註冊的每個組件都是相互獨立的。

所以我可以在應用程序的不同部分註冊組件?

編輯:找到這個答案:Knockout: Error: You cannot apply bindings multiple times to the same element when refreshing page

其中指出ko.applyBindings()只能被稱爲每個DOM元素一次。我沒有明白這一點,他們的文件非常渺茫。有沒有另外一種方法來在需要時使用knockout來注入html?

回答

1

can I register components in separate parts of the app?

沒有,據我所知,你不能。在致電applyBindings之前已完成註冊。

這樣做不是直接暗示組件必須依賴於彼此。您需要爲整個應用程序提供組合根(或至少每個applyBindings調用/應用程序DOM區域一個),並在那裏註冊所有組件。組件本身不需要彼此的知識,而不是說。

請注意,這只是約登記組件。您仍然可以根據需要爲實際組件提供asynchronous loading

0

爲什麼不在您的樓內設有商務邏輯編寫一個全局寄存器功能:

僞碼!

function registerAname() 
{ 
    if(knockout.components.contains('a-name')) 
     return; 

    knockout.components.register('a-name', { 
     viewModel: AViewModel, 
     template: { require: 'text!ui/views/a-view.html' } 
    }); 

    knockout.applyBindings(); 
} 

C類: registerAname()

X類:registerAname()

+0

這是僞代碼檢查,有像包含方法 – tire0011

相關問題