2012-10-06 78 views
0

我想要做的是動態模板綁定到一個observableArray與指定「afterAdd」和「beforeRemove」的選項。它可能更容易通過看我的代碼來理解:Knockoutjs動態模板綁定與Foreach和AfterAdd

<div id="form_container" data-bind="template: {name: fnGetTemplate, 
               foreach: OpenedForms(), 
               beforeRemove: fnBeforeRemoveProcess(), 
               afterAdd: fnAfterAddProcess()}"></div> 

(simplfied版)OpenedForms = ko.observableArray(){模板: '模板1'},{模板:「則Template2}]。

fnGetTemplate非常重視數組元素並返回模板名稱,例如「Template1」。

數組中的所有內容都被渲染;但問題是,fnAfterAddProcess // fnBeforeRemoveProcess之前調用fnGetTemplate。所以它實際上在調用afterAdd和afterRemove之後呈現模板。我嘗試用afterRender替換afterAdd,但同樣的事情發生了。出於某種原因,它實際上是所謂fnBeforeRemoveProcess - >fnAfterAddProcess - >fnGetTemplate時,我只增加了observableArray的元素。

然而,這個工作正常,但它不支持「beforeRemove」:

<div id="form_container" data-bind="foreach: {data: OpenedForms, afterRender: AfterAddProcess}"> 
    <div data-bind="template: {name: Template, data: $data}"></div> 
</div> 

也許我需要編寫自定義綁定,但如果有人能指出我哪裏錯了或者是更好的解決問題的方法。

感謝,

回答

0

然而,問題是,fnAfterAddProcess // fnBeforeRemoveProcess fnGetTemplate

那是因爲你調用你的綁定功能之前被調用,所以它們運行的​​時候綁定字符串被解析。您只需要在綁定中傳遞參考函數即可:

<div id="form_container" data-bind="template: {name: fnGetTemplate, 
               foreach: OpenedForms(), 
               beforeRemove: fnBeforeRemoveProcess, 
               afterAdd: fnAfterAddProcess}"></div>