2014-04-24 69 views
5

我目前正在Knockout中構建一個重號碼應用程序。在我的應用程序中有三種類型的數字:百分比,小數和大數字,我有每種類型的自定義綁定處理程序。敲除共享綁定處理程序

對於輸入,我還創建了一個數字驗證bindingHandler,它讀取每個按鍵以確保它是一個正在輸入的數字。 (在應用程序中有華麗的邊框CSS動畫和東西 - 這只是一個簡單的骨頭去除了例子)。

現在要讓輸入執行驗證檢查和數字格式化,我必須將變量綁定兩次,因爲您會在下面的提琴中正確地看到它。

<input data-bind="number: testdata, percentage: testdata"> 

我想,這是不必要的腹脹我的HTML標記,並必須有同時觸發兩個處理器創建一個整潔的方式。

我的問題:是否可以創建數字驗證腳本作爲一個函數,然後可以共享/包含在數字格式處理程序中;沒有膨脹我的Javascript?

我在淘汰賽上還是一個新手,所以我仍然不確定它的界限。

見小提琴:http://jsfiddle.net/axV6S/1/

回答

2

是的,你可以只提取出數初始化到它自己的功能,即改變這個:

ko.bindingHandlers.number = { 
    init: function (element) { 
     /* ... */ 
    } 
}; 

成這樣:

var numberInit = function(element) { 
    /* ... */ 
}; 

只需調用它從你的其他初始化像這樣:

init: function(element, valueAccessor) { 
    numberInit(element); 
    /* ... */ 
} 

,或者如果你想保持正確的「這個」背景:

init: function(element, valueAccessor) { 
    numberInit.apply(this,arguments); 
    /* ... */ 
} 
0

你複製了大量的建在淘汰賽中的功能。創建視圖模型時,您可以爲模型屬性定義限制。你可以爲你的很多數字數據的做到這一點:

this.FieldName = ko.observable().extend({ pattern: regex }); 

這會限制你的文本字段,一個第二,你不需要聽按鍵,並採取行動。 Knockout在後臺爲你做這個!

看一看本作更多的例子:http://mikedormitorio.azurewebsites.net/BlogPost/the-native-validation-rules-of-knockout-validation

這也是一個有用的閱讀:http://knockoutjs.com/documentation/extenders.html

+1

請注意,這依賴於[淘汰賽驗證(https://github.com/Knockout -Contrib/Knockout-Validation),這是一個外部庫,不是Knockout Core的一部分。 – janfoeh