BrewGuru Ответов: 1

Как использовать knockoutjs для фильтрации моделями представлений ребенка одного из родителей с ViewModel?


У меня есть viewmodel, который получает свои данные от контроллера MVC и преобразуется в JSON в представлении. Данные состоят из двух списков (плейлист и члены команды). Я использую Нокаутное отображение, чтобы сделать данные наблюдаемыми.

Я хотел бы создать функцию под названием 'getSelected' для каждого дочернего viewModel (playListItems и teamMemberItems) и иметь возможность вызывать метод из представления. Однако моя попытка, похоже, возвращает всю родительскую модель представления, а не отфильтрованную дочернюю модель представления.

Любая помощь будет Вам полезнабуду признателен.

Что я уже пробовал:

var ViewModel = function(data) {
        var self = this;
        self.playListItems = data.PlayList;
        self.teamMemberItems = data.TeamMembers;

        self.playListItems.getSelected = ko.observable(function(id) {
            var currentItem = ko.utils.arrayFirst(self.playListItems(),
                function(item) {
                    return item.RecordingId() === id;
                }).item;

            return currentItem;
        });
    }

1 Ответов

Рейтинг:
2

BrewGuru

Я смог заставить это работать, добавив в синтаксис '._latestValue'.. Я не уверен, что это "правильный" способ сделать это.

self.playListItems.getSelected = function(id) {
    var currentItem = ko.utils.arrayFirst(self.playListItems._latestValue,
        function(item) {
            return item.RecordingId() === id;
        });

    return currentItem;
};