Обновить элемент в Ko.ObservableArray

0

У меня есть небольшой вопрос, что я хочу найти один элемент по его свойству, и я хочу обновить тот же элемент, также он должен отражать в коллекции.

Я не использую библиотеку использования нокаутов.

 Choice = function (id, text, order, selected) {
            this.Text = ko.observable(text);
            this.ID = ko.observable(id);
            this.Order = ko.observable(order);
            this.Selected = ko.observable(selected);
        },
Question = function (questiontext, id, order) {
            this.QuestionName = ko.observable(questiontext);
            this.QuestionId = ko.observable(id);
            this.QuestionOrder = ko.observable(order);
            this.Choices = ko.observableArray([]);
            this.UserResponse = ko.observable();
            this.Inputs = ko.observable(new Input());
        },

Я хочу найти вопрос № 3, и я хочу обновить информацию о выборе элементов и добавить в "Вопросы".

Любая помощь по этому поводу.

  • 2
    Недостаточно кода для продолжения. Покажите свою общую модель представления (или, по крайней мере, ее упрощенную версию).
Теги:
single-page-application
knockout.js
durandal

1 ответ

0

Предполагая, что questions относятся к ObservableArray который содержит список Question на вашей модели вида:

function find(array, predicate) {
    array = ko.utils.unwrapObservable(array);
    for (var i = 0; i < array.length; i++)
        if (predicate(array[i]))
            return array[i];
}

var question = find(questions, function (q) { return q.QuestionId == 3; });
var choices = question.Choices;
// Update, add or do anything with 'choices'

Вещи, которые вы, возможно, захотите сделать после:

  • Добавьте аргумент, чтобы указать контекст, в котором работает предикат.
  • Добавьте аргумент, чтобы указать индекс для начала поиска.
  • Создайте псевдо-массивы для своих коллекций и добавьте их прототипы с помощью this функции, используя this вместо первого аргумента.
  • Оптимизируйте производительность (просмотр с ограничениями).
  • findAll вариант findAll который возвращает массив всех совпадений.
  • Подумайте об использовании сторонней библиотеки, чтобы помочь со всем этим, пока эти функции не станут стандартизованными. Некоторые сторонние библиотеки очень хорошо справляются со всем этим; это действительно зависит от того, насколько вы должны будете управлять этими структурами. Не добавляйте зависимость без каких-либо причин, но не обременяйте себя либо заново изобретая колесо, если оно не является целью компонента.

Редактировать: Typo - следует упомянуть, что я не запускал код, пожалуйста, не копируйте-вставить вслепую.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню