2012-01-19 72 views
3

什麼會被認爲是處理大量的自定義綁定與綁定不存在的可能性? 說我的HTML表達式綁定到image_url如下。敲除js大量的自定義綁定

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

然而,image_url綁定不可用。 在這種情況下,我只想返回一個字符串值company_banner。

通常會添加一個像下面的自定義處理程序,但如果該處理程序不可用,我們可以返回一些通用的反饋?

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

在我們的案例中,設計可能在代碼之前,所以我們不希望ko發牢騷。

+0

非常好的問題,遺憾的是沒有一個答案。但我想你可能想要更詳細地剖析ko庫的bindingHandlers對象,看看你是否可以在那裏做些什麼。但忍不住說了非常實用的問題 – Vin

+0

@Vin,是剛剛下載了ko的調試版本。如果我破解它會發布。 – Chin

+0

@Vin,通過它看。幸運的是有人 – Chin

回答

6

對於這種情況,我會考慮使用自定義綁定提供程序。這裏是描述功能的文章: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/