【问题标题】:Access the value of a custom knockout binding访问自定义敲除绑定的值
【发布时间】:2013-03-27 23:36:30
【问题描述】:

我有一个自定义的淘汰赛绑定,例如像这样:

ko.bindingHandlers.yourBindingName = {
    init: function(element, valueAccessor, allBindingsAccessor,
                   viewModel, bindingContext)
    {
        // how to access the value-part of the data-bind="name:value" attribute?
    },
};

和:

<div data-bind="yourBindingName: someValue"> </div>

是否可以从init-function 访问 data-bind 属性的值部分(即上例中的“someValue”)?


更新:只是为了澄清我的意思:

  • div 的数据绑定属性具有名称和值部分,以冒号分隔,例如"yourBindingName: someValue"
  • 名称部分指定要调用的绑定
  • 我想访问绑定中的值部分并将其用作参数

【问题讨论】:

  • 老实说,我的问题是你为什么要这样做?
  • 您是否介意将标题更改为“访问绑定目标的名称”或“值”以外的其他内容,这非常令人困惑。
  • @Tyrsius:我可以更改标题,但我不确定它是否正确。根据 KO 文档,data-bind 属性的第二部分称为“值”。
  • @M4N 确实如此,但仍然令人困惑。对于只阅读问题标题的人来说,一个不准确但不那么模棱两可的术语可能仍然更清楚。
  • @M4N 另外,我的回答不适合你吗?

标签: knockout.js


【解决方案1】:

如果我理解正确,那么发送到自定义绑定处理程序的数据就是 valueAccessor,作为一个 observable。因此,如果您想要该值,请执行以下操作:

var value = valueAccessor();

【讨论】:

  • 我真的想得到原始字符串值“someValue”,因为它是写在标记中的。但我想我必须再考虑一下——也许我正试图以一种非预期的方式使用淘汰赛。
  • 您的意思是要绑定到处理程序的数据属性的名称?
【解决方案2】:

我不知道你为什么会曾经想要这样做,但你可以这样做:

ko.bindingHandlers.reflector = {
    init: function(element, valueAccessor, allBindingsAccessor,
                   viewModel, bindingContext)
    {
        var reflected;
        var binding = valueAccessor();
        for (var prop in viewModel) {
            if (viewModel[prop] == binding) {
                reflected = prop;
                break;
            }
        }
        ko.bindingHandlers.text.update(element, function(){ return reflected});
    },
};

a fiddle

【讨论】:

  • 谢谢 - 我明天试试
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-16
  • 1970-01-01
  • 1970-01-01
  • 2015-04-08
  • 1970-01-01
  • 2012-12-06
相关资源
最近更新 更多