#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 из-за проблем со свойствами.