获取属性的名称作为字符串而不是属性值?

时间:2014-08-05 09:30:14

标签: javascript jquery knockout.js typescript

在绑定处理程序中,如果我有如下所示的绑定:

<div data-bind="someHandler { value : valueOnModel }"></div>

我的绑定处理程序的以下代码:

class someHandler : KnockoutBindingHandler {
  init(element, valueAccessor, allBindingsAccessor, data, context) {
    var va = valueAccessor();
    var value = va.value;
    //How to get "valueOnModel" here??
    var valuePropertyName : string;

    var isVisible = data[valuePropertyName + "_isVisible"];
  }
}

以上是我想要实现的,但是我不知道如何用上面的方法设置valuePropertyName?

任何帮助表示赞赏:)

2 个答案:

答案 0 :(得分:1)

好吧,我的回答可能看起来不那么优雅,只是一个想法 - 用值function() { ... }将值变量包装在你的变量中,所以为什么不反过来呢?

valueAccessor.toString().match(/{return (\w+) }/)[1]

我不是regEx的专家,但这适用于我的简单demo

答案 1 :(得分:0)

目前还有一个非常类似的问题:

Knockout how to get data-bind keys and value observables using element?

我有一个想法,并给出了答案,但我找不到一个完美的方法来做到这一点。我认为KO已经解析了&#39; valueOnModel&#39;进入各种函数引用,它实际上并没有让你访问它最初从绑定中解析出来的字符串。

所以我想,也许你可以通过重新分析元素的绑定来实现你所需要的东西吗?

    var binding_info = {};
    $($(element).attr("data-bind").split(",")).each(
        function(idx, binding) {
            var parts = binding.split(":")
            binding_info[parts[0].trim()] = parts[1].trim()
        }
    )

然后一旦你完成了,

    binding_info.value

应该返回&#34; valueOnModel&#34;

关于使用其他问题,有一个好主意:

http://joel.net/unobtrusive-data-binding-for-knockout-js

预先将绑定定义为JS对象。然后,您就可以在绑定处理程序中将此对象用作查找。