2017-10-11 83 views
0

我目前使用虛擬元素來顯示驗證錯誤(每個路徑可能有多個)。自定義敲除綁定來顯示錯誤消息

<div data-bind="foreach: validationErrors"> 
    <!-- ko if: path == 'title' && type == 'validation' --> 
    <div class="field-validation-error text-danger" data-bind="text: message"></div> 
    <!-- /ko --> 
</div> 

將由此消耗的一個例子的錯誤是:

{ 
    path: 'title', 
    type: 'validation', 
    message: 'Title is required' 
} 

我如何能實現使用自定義綁定是一回事嗎?我似乎無法找到一個可以理解的例子,它足夠接近我所做的任何用途。

+0

這聽起來像你想有一個[成分](http://knockoutjs.com/documentation/component-overview.html) –

+0

我嘗試了幾種不同的方法,包括模板,最終將我引向一個組件。沒有效果。最後,我發現了這個工作示例,它可以完成我所需的工作 - 對一個已過濾的數組執行操作。請注意,這不是我的[jsfiddle](http://jsfiddle.net/nYbpE/) – nlafratta

回答

0

簡單它換到組件:

ko.components.register('errors', { 
 
    viewModel: function(params) { 
 
     this.validationErrors = params.errors; 
 
    }, 
 
    template: 
 
     '<div data-bind="foreach: validationErrors">\ 
 
     <!-- ko if: path == "title" && type == "validation" -->\ 
 
     <div class="field-validation-error text-danger" data-bind="text: message"></div>\ 
 
     <!-- /ko -->\ 
 
     </div>' 
 
}); 
 

 
var model = { 
 
    errorsFromModel: ko.observableArray([ 
 
    {path: 'title', type: 'validation', message: 'Title is required'} 
 
    ]) 
 
}; 
 

 
ko.applyBindings(model); 
 

 
setTimeout(function() { model.errorsFromModel.push({path: 'title', type: 'validation', message: 'Another error added after 1 sec'}) }, 1000);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script> 
 
<errors params="errors: errorsFromModel"></errors>

+0

謝謝TSV,但不幸的是,這將無法正常工作。它只適用於名爲title的字段。我需要一個組件來處理所有的領域('tit; e','description'等)。我想出了一種不使用組件的替代方法,但它並不比我原來的代碼冗長(我將盡快發佈)。我仍然想知道如何用一個組件來概括它。 – nlafratta

+0

@nlafratta:爲什麼不從'ko中刪除'path ==「標題」'的條件if:path ==「title」&& type ==「validation」'。刪除後,這將適用於所有路徑。 – SpiderCode

相關問題