2012-05-08 114 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();这反过来会更新显示。