Нокаутирующий JS-фильтр SPA

Я разработал одностраничное приложение MVC 4, используя ADO.Net в качестве источника данных. Пытаясь отфильтровать представление по идентификатору, безуспешно пробовал переменные сеанса. Вот код просмотра:

<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:

.....
  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 в представление из контроллера. Любая идея, как я могу это сделать!!

Поскольку я не опытный программист, можно ли будет фильтровать (foreach)

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

Заранее спасибо.


person hncl    schedule 08.05.2012    source источник
comment
Не совсем понятно, что вы пытаетесь сделать. Что вы пытаетесь фильтровать? Похоже, у вас уже есть идентификатор на странице.   -  person Kyeotic    schedule 09.05.2012
comment
Идентификатор находится в классе, мне нужно отфильтровать базу данных, используя идентификатор при входе пользователя. Спасибо   -  person hncl    schedule 09.05.2012


Ответы (1)


Я не уверен, что понимаю, как вы получаете доступ к базе данных (на сервере, верно?) для фильтрации, но вы можете сделать что-то вроде этого:

<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(); это, в свою очередь, обновит дисплей.

person Gene Golovchinsky    schedule 20.05.2012