2017-06-15 45 views
0

我有一個叫做「應用程序」的viewModel,它包含申請人的信息。它看起來像這樣在淘汰賽視圖:[![請在此輸入圖像說明] [1]在knockout viewModel聲明中調用jquery函數。 (主要是語法問題)

[1]

而且我通過這個視圖模型試圖循環和過濾基於一個只有一個元素具體情況。

我最終試圖做的是,我只想在模態中顯示一個「應用程序」元素。

所以,我做了什麼至今,

<a href="#" data-toggle="modal" data-target="#previewApplicantModal" data-bind="attr: { 'data-applicationKey': application.applicationKey }"> 
    Preview Application 
</a> 

我添加了名爲applicationKey的屬性,所以它直接獲取申請人的「applicationKey」。

而且我做了一個jQuery函數,通過這樣做,返回此applicationKey:

   $('#previewApplicantModal').on('show.bs.modal', function (e) { 
        var key = $(e.relatedTarget).data('applicationkey'); 
        return key; 
       }); 

它讀取「數據applicationKey」並返回相應applicationKey。

例如,

<a href="#" data-toggle="modal" data-target="#previewApplicantModal" data-bind="attr: { 'data-applicationKey': application.applicationKey }" data-applicationkey="abd263zqe"> 
    Preview Application 
</a> 

回報

abd263zqe 

在那之後,我試圖讓一個名爲 「previewApplication」 只返回一個具有 「applicationKey」 應用元素的新視圖模型。我所做的是,我通過「應用程序」viewModel循環,只有當「i.application.applicationKey」等於上面寫的jquery函數返回的「applicationKey」時才返回。代碼如下所示:

  self.previewApplications = ko.computed(function() { 
       return ko.utils.arrayMap(self.applications(), function (i) { 
        if(i.application.applicationKey == THE JQUERY FUNCTION THAT RETURNS THE applicationKey)  
         return i.application; 
       }); 
      }); 

所以,我想回到具有相同applicationKey作爲由jQuery函數返回一個「應用程序」元素,但我不知道如何把在句法。

回答

1

嘗試修改您的jQuery的事件的關鍵存儲在您previewApplicationKey觀察到

$('#previewApplicantModal').on('show.bs.modal', function (e) { 
    var key = $(e.relatedTarget).data('applicationkey'); 
    viewModel.previewApplicationKey(key); 
}); 

,然後針對你的價值比較功能檢查

self.previewApplications = ko.computed(function() { 
    return ko.utils.arrayMap(self.applications(), function (i) { 
     if(i.application.applicationKey == self.previewApplicationKey())  
      return i.application; 
    }); 
}); 
+0

不「self.previewApplicationKey」必須「 ko.observable(null)「當我們第一次初始化它? – Dukakus17

+1

@ user7677413該值默認是未定義的,因此您可以排除「null」。如果你打算在綁定中使用它,並且希望UI相應地更新,它確實需要成爲ko.observable。對於這種特定的情況,你可能不需要它可以是一個正常的變量。 –

+0

太好了。現在我快到了!如果我點擊鏈接並嘗試在控制檯上鍵入「viewModel.previewApplicationKey()」,它會給我正確的applicationKey,當我檢查「viewModel.previewApplication()」時,除具有相應applicationKey的那個元素之外的所有元素都是未定義的。所以,現在我所要做的就是返回唯一一個不是「未定義」的元素,我該如何過濾掉? – Dukakus17