Использование Base2 с моделями представления KnockoutJS

#javascript #knockout.js #base

#javascript #knockout.js #База

Вопрос:

Я использую Base2 как средство, позволяющее нам легко выполнять наследование в нашей системе, а также использовать KnockoutJS для некоторых взаимодействий с пользовательским интерфейсом.

Мы определили базовый класс для наших ViewModels

 BaseViewModel = Base.extend({
    ...
});
 

Который мы затем расширяем для наших моделей представления:

 ExampleViewModel = BaseViewModel.extend({
    text: ko.observable("")
});
 

Однако, похоже, есть проблема. Когда вы создаете более 2 экземпляров модели представления (скажем, если вы помещаете их в observableArray и используете шаблоны для создания пользовательского интерфейса), кажется, что любые изменения, внесенные в привязанное поле, обновляют все модели представления, а не только ту, к которой оно привязано.

Кто-нибудь знает, почему это может быть?

Ответ №1:

Поскольку расширение фактически не создает экземпляр нового наблюдаемого, оно просто копирует ссылку.

Я думаю, вы можете сделать что-то вроде этого:

 ExampleViewModel = BaseViewModel.extend({
    constructor: function() {
        this.text = ko.observable("");
    }
});
 

Хотя это не так приятно, как обычный синтаксис Base2, это просто ограничение в реализации Knockout из-за проблем со свойствами.