【问题标题】:Knockout containerless control for custom binding handler用于自定义绑定处理程序的 Knockout 无容器控件
【发布时间】:2013-06-25 19:43:58
【问题描述】:

我创建了自定义绑定处理程序“foreachprop”

ko.bindingHandlers.foreachprop = {
transformObject: function (obj) {
    var properties = [];
    for (var key in obj) {
        if (obj.hasOwnProperty(key)) {
            properties.push({ key: key, value: obj[key] });
        }
    }
    return properties;
},
init: function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
    var value = ko.utils.unwrapObservable(valueAccessor()),
        properties = ko.bindingHandlers.foreachprop.transformObject(value);
    ko.applyBindingsToNode(element, { foreach: properties });
    return { controlsDescendantBindings: true };
}
};

如果我遍历对象

<div data-bind="foreachprop: sections"></div>

这行得通, 但是,如果我使用无容器控件,它不适用于相同的数据

<!-- ko foreachprop: sections --> <!-- /ko -->

如何为自定义绑定处理程序使用无连续控制流

Jsfiddle 创建了新的http://jsfiddle.net/E6xq2/5/

【问题讨论】:

  • 您的 JSFiddle 中没有淘汰赛。您发布了正确的链接吗?
  • 请检查你的小提琴。
  • jsfiddle.net/E6xq2/5 看看这个小提琴,我创建了一个新的来解释。

标签: knockout.js knockout-2.0


【解决方案1】:

查看文档:

http://knockoutjs.com/documentation/custom-bindings-for-virtual-elements.html

首先,告诉 Knockout 允许绑定虚拟元素:

ko.virtualElements.allowedBindings.foreachprop = true;

然后,如有必要,重写您的绑定以使用虚拟元素 API。

【讨论】:

  • 这不起作用,你能检查一下这个小提琴jsfiddle.net/E6xq2/5
  • 当然可以。更改 ko.virtualElements.allowedBindings.randomOrder = true;到 ko.virtualElements.allowedBindings.foreachprop = true;见:jsfiddle.net/E6xq2/6
  • 是的,它的工作。谢谢。我错过了文档的那部分。
猜你喜欢
  • 1970-01-01
  • 2013-07-08
  • 1970-01-01
  • 2014-06-16
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多