在绑定处理程序中,如果我有如下所示的绑定:
<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?
任何帮助表示赞赏:)
答案 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对象。然后,您就可以在绑定处理程序中将此对象用作查找。