knockout.js - Knockout js 大量自定义绑定(bind)

标签 knockout.js

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

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

但是,image_url 绑定(bind)很可能不可用。 在这种情况下,我只想返回 company_banner 的字符串值。

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

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

在我们的案例中,设计可能领先于代码,所以我们不想让 ko 提示。

最佳答案

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

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

它可能看起来像:

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/

关于knockout.js - Knockout js 大量自定义绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8927909/

相关文章:

javascript - 如何在 Knockout.js 中使用自定义绑定(bind)来添加使用 "foreach"的动画元素

javascript - knockout 3.1 : Select2 not working properly with valueAllowUnset

jquery - .then .done promise 不会使用 knockout 和 js 在 durandal spa 中工作

knockout.js - knockout 数组获取对象的不同值

javascript - 如何从输入字段获取值并将其分配给 View 模型中的 JavaScript 对象?

javascript - Knockout js模板,过滤可观察数组的第一个元素

javascript - Breeze.js 使用 noTracking 不展开实体

javascript - 在 KnockoutJS ViewModel 上定义函数

java - 在 Selenium WebDriver 中保存包含所有 Assets 的整个网页

javascript - Foreach : Toggle each icon - KnockoutJS