У меня есть сущность от Бриз, которая может иметь около 20 свойств, но затем я хочу обернуть объект в режиме просмотра и выставить только те несколько свойств как ko.observable(). Как мне сделать все, чтобы сделать уведомление об изменении свойств?Как я обертываю свой объект бриза в пределах модели просмотра, которая имеет несколько свойств, открытых как наблюдаемые.
В C#, я хотел бы сделать что-то вроде этого:
public double OtherSalesPercent
{
get { return Model.OtherSalesPercent; }
set
{
if (Model.OtherSalesPercent != value)
{
Model.OtherSalesPercent = value;
OnPropertyChanged("OtherSalesPercent");
}
}
}
UPDATE Jay спасибо за ответ. Я понимаю, что это делает это. Тем не менее, я не хочу, чтобы мое представление привязывалось напрямую к объектам, а скорее к viewmodel. Поэтому подумайте о названии, которое называется «Яблоки». И яблоки показывают список моделей просмотра apple. И каждый объект сущности имеет 30 различных свойств, но я хочу только выставить 3 из этих 30 свойств на модели просмотра apple. Итак, я хочу создать 3 ko.observable свойства на модели apple viewmodel, которая будет обрабатывать эти 3 свойства на объекте apple. То, что я до сих пор «работает», но я не считаю его самым чистым. Вот это свойство Имя:
var appleViewModel = function(appleEntity) {
var backingEntity = appleEntity;
var name = ko.observable(locationEntity.name());
name.subscribe(function(newValue) {
backingEntity.name(newValue);
});
var vm = {
name: name
};
return vm
};
Другая большая причина, это я использую jqxGrid, и у них есть вопросы, связываясь с Breeze сущности. Так что действительно, что я хочу, это appleViewModel, который будет обрабатывать эти свойства, но, если я изменю фактический объект apple (как в cancelChanges), я хочу, чтобы пользовательский интерфейс получил это изменение от сущности).
UPDATE 2
Это, кажется, дает мне все, что я хочу, и связывается с jqxGrid
var createViewModel = function(appleEntity) {
var entity = appleEntity;
var name = ko.observable(entity.name());
name.subscribe(function(newValue) {
entity.name(newValue);
});
entity.name.subscribe(function(newValue) {
name(entity.name());
});
var vm = {
name: name
};
return vm;
};
Но это только так кажется мне неправильным. Я в основном хочу двухстороннюю привязку. Поэтому, когда я изменяю свойство имени viewmodel, он меняет имя объекта поддержки ... и если я изменяю имя объекта поддержки, он обновит свойство name viewmodels.
Спасибо!
Это прекрасно работает. Кажется, что jqxGrid имеет проблемы с значениями ko.computed при записи. –