2015-08-27 57 views
0

我使用Knockout很多,而且經常需要在數據綁定屬性中編寫腳本。是否有任何驗證工具可以用於這些標記文件以驗證data-bind屬性中的JavaScript?如果有一個咕嚕的插件會很好。驗證屬性內的JavaScript

+1

工具來驗證什麼?這非常含糊。 – Chev

+0

檢查[modelview.js](https://github.com/foo123/modelview.js)一個快速的MVVM框架(靈感來自淘汰賽)與一個多功能和可擴展的類型轉換/驗證系統(PS作者) –

+0

上述評論,如果我正確理解MVVM需要驗證,而另一方面需要驗證是否需要驗證(其他類型的驗證意味着),則忽略以前的註釋 –

回答

3

可能沒有(顯着的)一個,因爲在視圖中有很多複雜的邏輯並不常見。使用類似MVVM的方法,如果您保持View非常簡單,並且在您的ViewModel中可以單元測試它的邏輯,那麼它效果最好。

所以不要做到這一點

var ViewModel = function() { 
 
    var self = this; 
 
    
 
    self.isCurrent = ko.observable(false); 
 
    self.item = ko.observable({ id: 42 }); 
 
} 
 

 
ko.applyBindings(new ViewModel());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script> 
 

 
<!-- Don't do this! --> 
 
<div data-bind="visible: !isCurrent() && !!item()"> 
 
    Showing something! 
 
</div>

相反,

var ViewModel = function() { 
 
    var self = this; 
 
    
 
    self.isCurrent = ko.observable(false); 
 
    self.item = ko.observable({ id: 42 }); 
 
    
 
    self.shouldShowItem = ko.computed(function() { 
 
    return !self.isCurrent() && !!self.item(); 
 
    }); 
 
} 
 

 
ko.applyBindings(new ViewModel());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script> 
 

 
<!-- Don't do this! --> 
 
<div data-bind="visible: shouldShowItem"> 
 
    Showing something! 
 
</div>

因爲這可以讓你單元測試shouldShowItem邏輯,例如,與QUnit:

QUnit.test("shouldShowItem is false if not isCurrent and item not set", function(assert) { 
    var vm = new ViewModel(); 
    vm.isCurrent(false); 
    vm.item(null); 
    assert.strictEqual(vm.shouldShowItem(), false); 
}); 

底線,如果你發現自己寫了很多邏輯視圖裏面,你可能需要一些它移動到您的視圖模型,並使其可測試。