Knockout js 大量自定义绑定

2024-04-05

在绑定不存在的情况下,处理大量自定义绑定的好方法是什么? 假设我的 html 表达式绑定到 image_url ,如下所示。

<span title="Company Logo" data-bind="image_url: company_banner"></span>

然而,image_url 绑定很可能不可用。 在这种情况下,我只想返回 company_banner 的字符串值。

通常情况下,人们会添加一个如下所示的自定义处理程序,但如果该处理程序不可用,我们可以返回一些通用反馈吗?

ko.bindingHandlers.buttonLabel = {//update etc}

在我们的例子中,设计可能领先于代码,所以我们不希望 ko 抱怨。


对于这种情况,我会考虑使用自定义绑定提供程序。这是一篇描述功能的文章:http://www.knockmeout.net/2011/09/ko-13-preview-part-2-custom-binding.html http://www.knockmeout.net/2011/09/ko-13-preview-part-2-custom-binding.html.

因此,我将创建一个自定义绑定提供程序,它是真正绑定提供程序的包装器。解析绑定后,我们可以检查它们以查看它们是否存在于ko.bindingHandlers。如果没有,那么我们可以添加一个带有其值的文本绑定。

它可能看起来像:

ko.lenientBindingProvider = function() {
   var realBindingProvider = new ko.bindingProvider();

   this.nodeHasBindings = realBindingProvider.nodeHasBindings;

   this.getBindings = function(node, bindingContext) {
       //parse the bindings with the real binding provider
       var result = realBindingProvider.getBindings(node, bindingContext);

       //inspect the returned bindings
       for (var binding in result) {
           if (result.hasOwnProperty(binding) && binding !== "_ko_property_writers" && !ko.bindingHandlers[binding]) {
                //add a text binding with whatever the missing binding was bound against
                result.text = result[binding];
           } 
       }

       return result;  
   };
};

ko.bindingProvider.instance = new ko.lenientBindingProvider();

这是一个示例:http://jsfiddle.net/rniemeyer/mMQKY/ http://jsfiddle.net/rniemeyer/mMQKY/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Knockout js 大量自定义绑定 的相关文章

随机推荐