2017-05-17 42 views
0

我有使用以下方式在淘汰賽自定義組件(我繼承了這個代碼)淘汰賽數據綁定定製組件

<div data-bind="template: { 
       name: 'error-message', data: { 
        isModified: isUserNameValid,       
        isValid: function() { return !isUserNameValid(); } 
       }, as: 'field' 
      }"> 

我有點糊塗了下面的代碼做什麼

isValid: function() { return !isUserNameValid(); } 

這與剛剛指定的不同之處有何不同?

isValid: !isUserNameValid() 

回答

1

這些構造是完全相同的,val淘汰賽的ID。所以你可以使用較短的一個。

請注意,最好避免在標記中編寫複雜的函數。這樣的功能應該移動到視圖模型對象。

var model = { isUserNameValid: ko.observable() }; 
 
ko.applyBindings(model); 
 

 
setTimeout(function() { model.isUserNameValid(true); }, 2000);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.0/knockout-min.js"></script> 
 

 
<script type="text/html" id="error-message"> 
 
<div>Template content</div> 
 
<div data-bind="text: isValid()"></div> 
 
</script> 
 

 
<div data-bind="template: { 
 
       name: 'error-message', data: { 
 
        isModified: isUserNameValid,       
 
        isValid: function() { return !isUserNameValid(); } 
 
       }, as: 'field' 
 
      }">

+0

這是否有什麼不同,當值更新?我認爲函數調用只更新一次該值? –

+0

@tmpdev在更新過程中沒有區別,因爲knockout每次評估表達式時都會收集依賴項(pureComputed除外),並且observable是封裝在函數中還是直接傳遞並不重要。 – TSV

+0

@tmpdev我添加了一個代碼,說明更新。 – TSV