2012-05-08 113 views
1

我開發了使用ADO.Net作爲數據源的MVC 4單頁應用程序。試圖通過ID過濾視圖,嘗試會話變量沒有任何運氣。下面是視圖代碼:SPA Knockout JS Filter

<script type="text/javascript" src="@Url.Content("~/Scripts/BloodPressuresViewModel.js")"></script> 
<script type="text/javascript"> 
    $(function() { 
     upshot.metadata(@(Html.Metadata<KOTest2.Controllers.DALController>())); 

     var viewModel = new MyApp.BloodPressuresViewModel({ 
      serviceUrl: "@Url.Content("~/api/DAL")" 
     }); 
     ko.applyBindings(viewModel); 
    }); 
</script> 

和熙是JavaScript文件的CALSS代碼:

..... 
    var entityType = "BloodPressure:#KOTest2.Models"; 
    MyApp.BloodPressure = function (data) { 
     var self = this; 

     // Underlying data 
     self.ID = ko.observable(data.ID); 
     self.PHN = ko.observable(data.PHN); 
     self.Day = ko.observable(data.Day); 
     self.Systolic = ko.observable(data.Systolic); 
     self.Diastolic = ko.observable(data.Diastolic); 
     self.HeartRate = ko.observable(data.HeartRate); 
     upshot.addEntityProperties(self, entityType); 
    } 
..... 

我認爲最好的解決辦法是使用ViewBag ID傳遞給來自控制器的視圖。任何想法我怎麼能做到這一點!

因爲我沒有經驗的程序員,纔有可能進行過濾(的foreach)

<tbody data-bind="foreach: bloodPressures"> 

在此先感謝。

+0

這是不是很清楚你想要做什麼。你想過濾什麼?它看起來像你已經在頁面上的ID。 – Tyrsius

+0

該ID在類中,我需要在用戶登錄時使用ID過濾數據庫。謝謝 – hncl

回答

0

我不知道我理解你如何訪問數據庫(在服務器上,對吧?)做過濾,但你可以做這樣的事情:

<table data-bind="foreach: rows"> 
    <tr> 
     <td>id: <span data-bind="text: ID"></span></td> 
     <td>PHN: <span data-bind="text: PHN"></span></td> 
     .... 
    </tr> 
</table> 

,並在你的JavaScript

function viewModel() { 
    var self = this; 
    this.loggedIn = ko.observable(false); 
    this.rows = ko.observableArray([]); 

    // return an array of objects to display to the user 
    function getDataFromServer() { 

     return ...; 
    } 

    ko.computed(function() { 
     if (this.loggedIn()) 
      this.rows(getDataFromServer()); 
    },this); 

    ... 
} 

但是,如果您的身份驗證成功,請執行this.loggedIn(true),這將導致計算的函數觸發服務器的拉取操作以及設置this.rows();這反過來會更新顯示。