将特定上下文传递给子级的自定义绑定?

时间:2012-12-20 17:59:44

标签: knockout.js

我在Knockout中创建了一个自定义绑定,用于生成窗口并设置默认值。

该窗口进行ajax调用以检索将用作其内容的模板。

有没有办法可以确保此内容受到约束?

即将模板加载到页面后,我希望模板中的任何挖空绑定都能进行渲染/处理。

除此之外,有没有办法可以设置内容绑定的上下文是什么?

即从我的自定义绑定中,我想说我的'value.contentOptions'对象是加载到窗口中的内容的起始级别。

我觉得它是 ko.applyBindingsToDescendants bindingContext.createChildContext ko.applyBindingsToNode controlsDescendantBindings 的组合但我担心我似乎无法弄清楚

我会发布代码,但此时它只是纯粹猜测D: - 如果你想看到我的一些绑定代码让我知道。

我看到的一些警告我正在尝试做什么:

直到绑定完成后才会加载内容,因为它的异步并且可能必须转到服务器。

我的自定义绑定是Kendo Window的包装器,我正在尝试使用其内置的“内容”功能< - 我不必使用此功能,但我想保留窗口,如果我可以在这个时候。

2 个答案:

答案 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)的一部分用于绑定而不是整个视图模型。

http://jsfiddle.net/6Hvxn/

答案 1 :(得分:0)

这正是我为什么我的组合框结合(它是一个未完成的组合框用于淘汰赛)

我使用自定义模板源(而不是使用脚本标签的构建),然后ko.renderTemplate与constrol一起下降为true,请在此处查看我的答案

Add Knockout Data Driven Table to Knockout Data Driven Accordion Pane

编辑:关于加载异步ajax模板,在init你可以绑定到一个空虚拟templta然后当实际模板加载绑定到那个时,只需确保你将模板名称绑定到一个observable