2017-03-15 81 views
0

我有兩個單獨的基因敲除可觀察數組。如果你在一個foreach結構中調用一個函數,並且函數在$ root中。該元素可供您使用。然而,計算函數似乎並非如此。是否有可能使它適用於計算函數?這裏是一個演示情況的小提琴。是否有可能將孩子傳遞給計算函數作爲參數

https://jsfiddle.net/ubvyeba8/1/

,或者您可能會遇到下面的代碼片段。

function employee(empid, first, last){ 
 
    var self = this; 
 
    this.empid = ko.observable(empid); 
 
    this.first = ko.observable(first); 
 
    this.last = ko.observable(last); 
 
} 
 

 
function model() { 
 
    var self = this; 
 
    this.employees = ko.observableArray(''); 
 
    this.employeesThatWorkInHR = ko.observableArray(['1','4','5']) 
 
    this.testComputable = ko.computed(function(emp){ 
 
    if (emp){ 
 
    return true; 
 
    }else{ 
 
    return false; 
 
    } 
 
    },this); 
 
    this.testFunction = function(emp){ 
 
    if (emp){ 
 
    alert('true'); 
 
    }else{ 
 
    alert('false'); 
 
    } 
 
    } 
 
    
 
    
 
} 
 

 
var mymodel = new model(); 
 

 
$(document).ready(function() { 
 
    ko.applyBindings(mymodel); 
 
    mymodel.employees.push(new employee('1','Fred','Smith')); 
 
    mymodel.employees.push(new employee('2','John','Jones')); 
 
    mymodel.employees.push(new employee('3','Mary','Jane')); 
 
    mymodel.employees.push(new employee('4','Sue','Green')); 
 
    mymodel.employees.push(new employee('5','Terrence','Small')); 
 
});
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script> 
 

 

 
<table class="table"> 
 
<thead> 
 
    <tr> 
 
    <th>Id</th> 
 
    <th>First</th> 
 
    <th>Last</th> 
 
    <th>is emp passed to computed</th> 
 
    <th></th> 
 
    </tr> 
 
</thead> 
 
<tbody data-bind="foreach: employees"> 
 
    <tr> 
 
    <td data-bind="text: empid"></td> 
 
    <td data-bind="text: first"></td> 
 
    <td data-bind="text: last"></td> 
 
    <td data-bind="text: $root.testComputable"></td> 
 
    <td><button class="btn" data-bind="click: $root.testFunction"> 
 
     is emp passed to function 
 
    </button></td> 
 
    </tr> 
 
</tbody> 
 
</table>

+0

我不這麼認爲,但是您可以將計算結果向下移動到員工對象中以訪問它。 –

回答

3

什麼是你想使用在這種情況下一個計算來完成?當一個值取決於其他可觀測值的值時,將使用計算函數,因此計算函數將跟蹤相關值並進行相應更新。如果您想要訂閱可觀察數組中的更改,則可以使用描述爲here(搜索'明確訂閱觀察值')的訂閱功能。

訂閱函數確實接受更新後的值作爲其函數參數,所以也許您可以將其用於您的目的。一個計算的函數沒有參數(這就是爲什麼從未在您的示例中定義emp的原因),但是您可以使用「this」來訪問viewmodel中的其他屬性。

+0

謝謝,以爲你讓我走上正軌。這是我做的。 https://jsfiddle.net/ubvyeba8/19/我將計算器移入可觀察數組中。在計算中我引用了另一個可觀察數組。我有點驚訝,我不必做某種訂閱就可以使它工作,但它似乎正在工作。 –

相關問題