Использование Kendo MVVM
с Typescript
было в основном приятным, но я уже сталкивался с проблемой, и она снова поднимает голову... Подробнее об оригинале см. в этом вопросе.
Typescript с Kendo MVVM
Общая проблема заключалась в том, что мне нужно было определить массив как kendo.data.ObservableArray
. Теперь вот проблема, с которой я столкнулся...
Я не понимаю, когда я должен объявить свойство наблюдаемым или просто оставить его как обычно и позволить процессу быть естественным. На самом деле я серьезно запутался во всем испытании. Чтобы привести пример ...
export class Prototype {
public Editing: boolean = false;
public Id: string = "";
public Name: string = "";
public Mutations: any[] = [];
public Tags: any[] = [];
public Conditions: any[] = [];
};
}
var viewModel = kendo.observable(new Prototype());
viewModel.Mutations.push({ // new data // });
Это работает. Меня это ДЕЙСТВИТЕЛЬНО сбивает с толку, потому что я не расширил ObservableObject
, как в исходном примере. Если я распечатаю модель представления, я увижу, что все массивы были преобразованы в ObservableArray
, что мне и нужно.
Но потом у меня похожая ситуация с более вложенной частью программы...
export class Condition {
public Label: string = "Pushed Condition";
public Parts: observableArray = kendo.observableHierarchy([]);
constructor(data?: any, mapped?: any) {
for (name in mapped) {
this[name] = mapped[name];
}
for (name in data) {
this[name] = data[name];
}
}
public onRemove(e) {
e.data.parent().remove(e);
}
public Push(data: any) {
data.onRemove = e => {
e.data.parent().remove(e);
};
this.Parts.push(data);
}
}
Вот тут-то мне и мозг вышибло. Один из этих объектов создается как свойство в ObservableArray, но затем НЕ превращается в наблюдаемое. Итак, следующее...
$mutation.Conditions.push(new Condition());
не ведет себя как наблюдаемый и не обновляется. Я должен явно сделать это как...
$mutation.Conditions.push(kendo.observable(new Condition()));
Но обычно мне не приходится этого делать, когда я добавляю что-то в коллекцию Mutations[]
. Я могу просто пойти...
viewModel.Mutations.push(new Mutation());
и все в порядке.
Это еще больше сбивает с толку с массивом Parts
Condition. Если я объявлю его как any[]
, это не сработает, даже если я создам условие с kendo.observable
. Единственный способ, которым я смог заставить его работать, - это явно объявить его как ObservableArray
.
Может ли кто-нибудь помочь мне понять это? У меня есть программа, работающая так, как я хочу, но я сильно запутался, и я считаю, что объявлять их по-разному в разных местах действительно тупым, и мне это не нравится. Со временем мой код будет намного сложнее поддерживать.
observableArray
, он превращает его в наблюдаемое, но если я объявлю его как фактическое наблюдаемое, это не сработает. - person Ciel   schedule 28.01.2014kendo.observable(new Prototype());
? есть ли шанс, что вы сможете скопировать соответствующие части вашего кода в пример проекта, с которым мы могли бы поиграть? - person Lars Höppner   schedule 28.01.2014