0

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

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

有没有办法确保这些内容被绑定?

即一旦将模板加载到页面中,我希望模板中的任何敲除绑定都可以呈现/处理。

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

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

我觉得它是ko.applyBindingsToDescendantsbindingContext.createChildContextko.applyBindingsToNodecontrolsDescendantBindings的某种组合,但恐怕我似乎无法弄清楚

我会发布代码,但此时它只是纯粹的猜测 D: - 如果您想查看我的一些绑定代码,请告诉我。

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

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

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

4

2 回答 2

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,告诉敲除将绑定仅应用于您的模板。

此外,当您应用绑定时,您可以指定您只希望部分视图模型 (vm.messages) 用于绑定,而不是整个视图模型。

http://jsfiddle.net/6Hvxn/

于 2012-12-20T22:17:34.477 回答
0

这正是我所做的,为什么我的组合框绑定(它是一个未捕获的组合框,用于淘汰赛)

我使用自定义模板源(而不是使用脚本标签的内置模板),然后将 ko.renderTemplate 与控制血统一起使用,请在此处查看我的答案

将剔除数据驱动表添加到剔除数据驱动手风琴窗格

编辑:关于加载异步 ajax 模板,在初始化时您可以绑定到一个空的虚拟模板,然后在加载实际模板时绑定到该模板,只需确保将模板名称绑定到可观察对象

于 2012-12-21T10:10:11.157 回答