我在Knockout中创建了一个自定义绑定,用于生成窗口并设置默认值。
该窗口进行ajax调用以检索将用作其内容的模板。
有没有办法可以确保此内容受到约束?
即将模板加载到页面后,我希望模板中的任何挖空绑定都能进行渲染/处理。
除此之外,有没有办法可以设置内容绑定的上下文是什么?
即从我的自定义绑定中,我想说我的'value.contentOptions'对象是加载到窗口中的内容的起始级别。
我觉得它是 ko.applyBindingsToDescendants , bindingContext.createChildContext , ko.applyBindingsToNode 和 controlsDescendantBindings 的组合但我担心我似乎无法弄清楚
我会发布代码,但此时它只是纯粹猜测D: - 如果你想看到我的一些绑定代码让我知道。
我看到的一些警告我正在尝试做什么:
直到绑定完成后才会加载内容,因为它的异步并且可能必须转到服务器。
我的自定义绑定是Kendo Window的包装器,我正在尝试使用其内置的“内容”功能< - 我不必使用此功能,但我想保留窗口,如果我可以在这个时候。
答案 0 :(得分:0)
调用applyBindings时可以使用第二个参数。第一个参数是viewmodel。第二个参数是可选的,是应该应用绑定的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仅将绑定应用于您的模板。
此外,在应用绑定时,您可以指定只希望视图模型(vm.messages)的一部分用于绑定而不是整个视图模型。
答案 1 :(得分:0)
这正是我为什么我的组合框结合(它是一个未完成的组合框用于淘汰赛)
我使用自定义模板源(而不是使用脚本标签的构建),然后ko.renderTemplate与constrol一起下降为true,请在此处查看我的答案
Add Knockout Data Driven Table to Knockout Data Driven Accordion Pane
编辑:关于加载异步ajax模板,在init你可以绑定到一个空虚拟templta然后当实际模板加载绑定到那个时,只需确保你将模板名称绑定到一个observable