2012-12-20 71 views
0

我在Knockout中創建了一個自定義綁定,用於生成一個窗口並設置默認值。將特定上下文傳遞給兒童的自定義綁定?

該窗口使ajax調用去檢索將用作其內容的模板。

有沒有一種方法可以確保這些內容被綁定?

即一旦模板加載到頁面中,我希望模板內的任何挖空綁定進行渲染/處理。

除此之外,有沒有一種方法可以設置內容綁定的上下文是什麼?

即從我的自定義綁定我想說我的'value.contentOptions'對象是加載到窗口中的內容的開始級別。

我覺得它的ko.applyBindingsToDescendants,一些組合bindingContext.createChildContextko.applyBindingsToNodecontrolsDescendantBindings但我怕我似乎無法弄清楚

我會發布代碼,但在這一點上它只是猜測D: - 如果你想看到我的一些綁定代碼讓我知道。

一些注意事項我看到我想要做的事:

內容不會被加載,直到最有可能進行綁定已經因爲它的異步完成,可能要返回到服務器。

我的自定義綁定是一個劍道窗口的包裝,我嘗試使用其內置的「內容」功能< - 我沒有使用此功能,但我想保持窗口,如果我可以在這個時候。

回答

0

調用applyBindings時可以使用第二個參數。第一個參數是必需的,它是視圖模型。第二個參數是可選的,是應用綁定的DOM元素(默認是整個頁面)。

下面是一個例子:

<div id="templateGoesHere"></div> 
<div id="otherPart"> 
    <div data-bind="text: otherStuff"></div> 
</div>​ 

和相應的javascript:

var vm = { 
    messages : { 
     myMessage : ko.observable("Hello World!") 
    }, 
    otherStuff : ko.observable("Nothing to see here") 
}; 

// Apply bindings to the part of the page that doesn't 
// include where the template will go 
ko.applyBindings(vm, $('#otherPart')[0]); 

// Get template from elsewhere 
var template = "<span data-bind='text: myMessage'></span>"; 
// Add template to page 
$('#templateGoesHere').html(template); 
// Bind data to template 
ko.applyBindings(vm.messages, $('#templateGoesHere')[0]); 
​ 

你必須有您插入你的模板一個div(templateGoesHere),以及您的模板後,被添加到頁面,您可以調用applyBindings,告訴knockout將綁定僅應用於您的模板。

此外,當您應用綁定時,您可以指定您只需要將一部分viewmodel(vm.messages)用於綁定而不是整個viewmodel。

http://jsfiddle.net/6Hvxn/

0

這正是我做了什麼,爲什麼我的組合框結合(其爲一個淘汰賽未捕撈組合框)

我使用自定義模板源(而不是在一個使用腳本標記的構建),然後ko.renderTemplate連同constrol下坡屬實,請參閱我的答案在這裏

Add Knockout Data Driven Table to Knockout Data Driven Accordion Pane

編輯:關於加載異步AJAX模板,在初始化即可綁定到一個空的虛擬templta,然後當實際的模板被加載綁定到,只要確保您綁定模板名稱到一個可觀察的

相關問題