Ember.js QT с Javascript Bridge

У нас есть полное настольное приложение, основанное на QT C ++ (Mac & окна). Мы используем webkit для обслуживания пользовательского интерфейса, основанного на HTML и Javascript. Мы также взаимодействуем с C ++ через мост javascript. Я делаю довольно много и включаю Ember.js в качестве MVC для гораздо более модульного пользовательского интерфейса.

Мой вопрос касается лучшего метода для настойчивости. Должен ли я придерживаться объектов Javascript, которые мы используем в настоящее время, или перейти на Ember Data для сохранения и чтения / записи через функцию в Ember Data (слой перевода)?

Также мы используем webkit, но стоит ли мне вместо этого использовать Node.js, а не прямые html / js?

Я бы не хотел делать кардинальные изменения, но я хочу сделать это правильно. Любой совет?

1

Решение

Со стороны Ember нет смысла использовать Ember Data, потому что Ember прекрасно работает без него. Но инфраструктура Ember сильно зависит от API, предоставляемого Ember.Observable, который доступен для всех подклассов Ember.Object. Аналогично, массивы JavaScript будут поддерживать больше функций Ember, если вы используете Ember.Array а также Ember.MutableArray, хотя это произойдет автоматически, если вы запрещать Ember.EXTEND_PROTOTYPES.

Таким образом, один очень разумный подход заключается в переносе существующих классов моделей на Ember.Object, Это потребует, среди прочего, использования get а также set чтобы получить доступ к свойствам. Если вы сделаете это, то ваши объекты будут первоклассными гражданами Ember, и вы получите доступ ко всем удобным функциям Ember, включая автоматические обновления представлений и привязки данных.

Вот что Ember.Object Как выглядит и как он интегрируется с остальной частью Ember:

MyApp.Person = Ember.Object.extend({
firstName: null,
lastName: null,

init: function () {
// You can put more initialization code here.
},

// Compute fullName based on firstName and lastName.
// This will automatically propagate updates when
// firstName or lastName changes.
fullName: function () {
return this.get("firstName") + " " + this.get("lastName");
}.property("firstName", "lastName")
});

var person = MyApp.Person.create({ firstName: "Jane", lastName: "Doe" })

Затем в представлении Ember вы могли бы написать что-то вроде:

<p>{{person.fullName}}</p>

… и представление будет автоматически обновляться всякий раз, когда firstName или же lastName изменилось. Точно так же вы можете редактировать firstName используя следующий код:

{{view Ember.TextField valueBinding="person.firstName"}}

В этом примере изменения в текстовом поле будут автоматически распространяться обратно на базовый объект. (Хотя вы можете стать умным и построить текстовое поле, которое распространяет изменения, только когда пользователь завершит редактирование.)

Если вам нужно передать обновления свойств из Ember в QT, см. руководство по созданию геттеров и сеттеров с вычисленными свойствами или использовать наблюдателей. Многое зависит от того, как именно вы выставляете свои C ++ API через мост JavaScript. Но пока вы можете связать Ember.Observable так или иначе, у вас будет полный доступ ко всем функциям Ember.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]